XML ファイルに含まれるデータを grep する必要があります。取得する必要がある要素は複数あり、最後の要素はノード内にあります。私が調べている要素の間にはたくさんのデータがあります。次のように、複数の要素を簡単にgrepできます。
grep -E "<first|<second|<third|<seventh" file.xml
しかし、私は次のようなファイル構造を持っているので:
<first>First</first>
<second>Second</second>
<third>Third</third>
<fourth>Fourth</fourth>
<fifth>Fifth</fifth>
<sixth flexible="true">
<low>0.09</low>
<high>5.90</high>
</sixth>
<seventh flexible="false">
<low>1.82</low>
<high>3.14</high>
</seventh>
ノード内の数値データを取得して<seventh>
いません (そのコマンドでは期待していませんでした)。したがって、(after) スイッチを使用しようとしていますgrep -An
。ここで、「n」は最初の一致後に一致する行数で、7 番目のノードの残りを取得します。
grep -E "<first" -E "<second" -E "<third" -E -A3 "<seventh" file.xml
どちらが返されますか:
<first>First</first>
<second>Second</second>
<third>Third</third>
<seventh flexible="false">
<low>1.82</low>
<high>3.14</high>
</seventh>
これをマッサージして最終結果を得ることができます (実際には、関連する 1、2、3 番目の文字列と共に 7 番目のノードからの「高」データのみが必要です)。しかし、それはうまくいきません。直後に最初の 3 つの要素を取得して<first
いて、残りのコマンドは無視されます。
私も試しました:
grep -E "<first|<second|<third" -E -A3 "<seventh" file.xml
これにより、同様の結果が得られますが-E -A3 "<seventh
、コマンドの " " 部分は完全に無視されます。-A3 はまだコマンドの前の部分に逆方向に適用されているため、無視しないと思います。ポストコマンド スイッチを使用できることは理解していますが、どれだけ戻るかを制御できますか?
grep のマニュアル ページを読みましたが、コマンドを連結する方法がわかりませんでした。それが重要な場合は Mac を使用していますが、必要に応じて Linux と Windows のボックスに簡単にアクセスできます。
必要なデータを取得するにはどうすればよいですか?