パターンが一致した後、ファイル内の他のパターンが複数回一致するまでテキストを印刷しようとしています。与えられたスクリプトを修正しようとしています。ここしかし、そうしませんでした。例えば。内容はfile1.txt
example text
more example
pattern1
important text
very important
need this too
pattern2
i dont require this
junk text
more junk
pattern1
important text
very important
need this too
pattern2
junk
期待される出力
pattern1
important text
very important
need this too
pattern1
important text
very important
need this too
誰かが修正を提案できますか?
ありがとうございます。
ベストアンサー1
パターン(境界を含む)間の行間の一致は、sedの標準範囲セレクタです。
sed -n -e '/pattern1/,/pattern2/p' example.txt
効率をどれほど重要にするか(ファイルのサイズ)に応じて、怠惰にして2番目のパスを使用してパターン2マーカーを削除できます。
cat example.txt \
| sed -n -e '/pattern1/,/pattern2/p' \
| sed -e '/pattern2/d'
< example.txt | sed ... | sed ...
(はい、これはパフォーマンスの低下よりも複数のパイプフィルタを接続する読みやすさを好むので、catの無駄な使用です。そしてこれがPOSIXコマンドであるのか、それともbashとzshに存在する拡張なのか、今は不明です。)