grep
勝ちました “ここであなたを助けます。これは、範囲式を使用してsed
でよりよく達成される仕事です:
$ sed -n "/aaa/,/cdn/p" file aaa b12 cdn $ sed -n "/zdk/,/dke/p" file zdk aaa b12 cdn dke
sed -n
は自動印刷を抑制し、明示的に要求された場合にのみ行が印刷されるようにします。これは、範囲/aaa/,/cdn/
が発生したときに発生します。
これらの範囲式は、awk
でも使用できます。ここでは、次のように言うことができます。
awk "/zdk/,/dke/" file
もちろん、すべてこれらの条件をsed -n "/^aaa$/,/^cdn$/p" file
のようなより厳密な正規表現に拡張して、行が正確にaaa
と、他には何もありません。
コメント
ここにgrep
コマンドがあります:
grep -o "aaa.*cdn" <(paste -sd_ file) | tr "_" "\n"
ですが、grep
(-P
-すべてのプラットフォームでサポートされているわけではありません。 、OS Xのように)、回避策として、新しい行を_
文字に置き換えてgrep
の後、それらを元に戻します。
または、 pcregrep
は複数行のパターンをサポートします(-M
)。
またはex
:
ex +"/aaa/,/cdn/p" -scq! file