各sedマッチごとに別々

各sedマッチごとに別々

私はsedを使用して2つの異なるパターン間の行を返します[(1) <Directory>, (2) </Directory>]。与えられた入力ファイルに対して、sedには複数の一致があり、各個別の一致をパイプすることが可能かどうかを知りたいです。

私が基本的にやりたいことは次のとおりです。 sed -n "/ddd/,/</ddd>p" < input.conf | grep Options

...
ddd    Start of Match group #1
eee
fff
/ddd   End of Match group #1
...
ddd    Start of Match group #2
iii
yyy
/ddd   End of Match group #2

一致する各グループにfffパターンが含まれていることを確認したいと思います。

ベストアンサー1

複雑な要件を考慮してこの問題を解決するには、awkがより適しています。

最初から最後までsed印刷に対応する内容は次のとおりです(awk)。

$ awk '/^ddd/{p=1};p;/^[/]ddd/{p=0}' file
ddd    Start of Match group #1
eee
fff
/ddd   End of Match group #1
ddd    Start of Match group #2
iii
yyy
/ddd   End of Match group #2

amtchを使用すると、^amtchは行の先頭にあり、行の先頭にのみaと[\]一致します。\

テストを切り替えるには、開始行と終了行を削除するだけです。

$ awk '/^[/]ddd/{p=0};p;/^ddd/{p=1}' file
eee
fff
iii
yyy

テストする必要がある残りのもの(範囲内)fff。これは次の方法で行うことができます。

awk ' /^[/]ddd/{p=0;if(found==0){print NR};found=0};
      p&&($0~/fff/){found=1};
      /^ddd/{p=1}
    ' file

これにより、そのグループに含まれていないグループの最後の行の行番号(NR)が印刷されますfff

おすすめ記事