ファイルから複数の文字列を検索し、特定の文字列を検索して、その後の5行も表示したいと思います。
cat file | grep -e 'string1' -e 'string2'
もちろん動作しますが、次のようなものを取得したいと思います。
cat file | grep -e 'string1' -e -A 5 'string2'
string1を含む行のみを表示し、string2を含む行とstring2の後の5行だけを表示し、string1の後の5行を表示しないようにするにはどうすればよいですか(-A 5オプションを使用すると仮定)。
編集:ちょうどawkで作業しました。
cat file | awk '/string1/{c=1}/string2/{c=5}{while(c-->0){print;getline}}'
答え1
awkコードについて
awk '/string1/ {if ( c <= 0 ) c = 1;} /string2/ {c=5} { if (c-- > 0) print; }' file
- いいえ
cat ... | awk
、awkはファイルを読み取ることができます。 - テストを並べ替えました(string1がstring2の後に1行続くと、OPソリューションで印刷が中断されます)。
答え2
一度にすべて使用することはできませんgrep
。 2つのインスタンスを使用する必要がありますgrep
。
grep 'string1' file; grep -A 5 'string2' file
最初の成功後に2回目の実行を実行するには:
grep 'string1' file && grep -A 5 'string2' file
答え3
横解決策:
sed -n '/string2/,+4{p;b;};/string1/p' file
私も代わりにsed
受け入れる~
+