@エドモートン:私はここであなたに同意しません。sed
マルチライングレッピングを行うためのエレガントな方法を思い付くのに、非常に便利でシンプルであることがわかりました(パターンの概念を理解し、バッファーを保持すると)。
たとえば、ホスト名と各ホストに関する情報が含まれているテキストファイルを見てみましょう。その間に、私が気にしない多くのがらくたがあります。
Host: foo1
some junk, doesnt matter
some junk, doesnt matter
Info: about foo1 that I really care about!!
some junk, doesnt matter
some junk, doesnt matter
Info: a second line about foo1 that I really care about!!
some junk, doesnt matter
some junk, doesnt matter
Host: foo2
some junk, doesnt matter
Info: about foo2 that I really care about!!
some junk, doesnt matter
some junk, doesnt matter
私にとって、ホスト名と対応するinfo
行を含む行を取得するawkスクリプトは、sedで実行できるものよりも少し時間がかかります。
sed -n '/Host:/{h}; /Info/{x;p;x;p;}' myfile.txt
出力は次のようになります。
Host: foo1
Info: about foo1 that I really care about!!
Host: foo1
Info: a second line about foo1 that I really care about!!
Host: foo2
Info: about foo2 that I really care about!!
(Host: foo1
これは出力に2回表示されることに注意してください。)
説明:
-n
明示的に印刷されない限り、出力を無効にします
- 最初に一致し、行を見つけ
Host:
てホールドバッファに入れます(h)
- 2番目の一致は、次のInfo:行を検索しますが、最初にパターンバッファー内の現在の行をホールドバッファーと交換(x)し、その
Host:
行を印刷(p)してから、再交換(x)してInfo:行を印刷(p)します。
はい、これは単純な例ですが、これは単純なsedワンライナーですぐに対処された一般的な問題だと思います。特定の予測可能なシーケンスに依存できないタスクなど、はるかに複雑なタスクの場合は、awkの方が適している場合があります。