他のパターンから最も近いパターン行を見つけ、行番号を表示します。

他のパターンから最も近いパターン行を見つけ、行番号を表示します。

いくつかの繰り返し部分を含む非常に長いXMLファイルがあります。文字列Aに最も近い文字列Bが表示される行番号を探したいです。多くのインスタンスがあるとしましょう。

<section>
  ...
  <entry>
    <key>key-im-looking-for</key>
    ...
  </entry>
  ...
  <type>org.apache.whatever.package</type>
  ...
</section>

以下を含む行番号を見つけたいと思います。

key-im-looking-for

<type>org.apache.whatever.package</type>grep、awk、またはsedを使用して、検索語に最も近い(または同じセクションに含まれる)検索語を見つけます。

ベストアンサー1

まず、XMLで行番号を見つけるのが少し奇妙であることがわかりました。 XMLは空白が関係のないツリー構造なので、行番号も関係ありません。これが正しいかどうか疑問に思います。XYの問題

第二に、行番号の問題を無視する場合は、通常、適切なXMLパーサーまたはXPATHクエリを実行できるものを使用することをお勧めします。 XMLに関しては、あなたの質問は「X型ノードのキーは何ですか?」に近いです。これはXMLで作業する際の妥当でよく定義された質問です。

つまり、「最も近い」が常に最初に<key>出ている場合は、<type>awkでこのアルゴリズムを検討できます。

  • 行が一致する場合は、<key>key-im-looking-for<行番号を記録します。
  • 行が一致した場合は<type>org.apache.whatever.package<処理を停止します。
  • 最後に印刷されたレコードの行番号

このような:

awk '/<key>key-im-looking-for</ { line=NR }
     /<type>org.apache.whatever.package</ { exit }
     END { print line }' input.xml

おすすめ記事