どのように組み合わせることができますか?
egrep 'version:|hostname:' File.log
そして
egrep -A1 'error' File.log
一つになってegrep
同時に処刑されるようにしますか?
よろしくお願いします!
答え1
version:
私が正しく理解したら、hostname:
またはを含むすべての行にerror
一致する行の後の行を印刷したいと思いますerror
。
grepではこれを行うことはできませんが、AWKでは比較的簡単に実行できます。ここで、このp
変数は印刷する行のカウンターとして機能し、他の変数はパターンが一致した後に印刷します。
% cat foo.txt
hostname: foo
version: 1.2.3
blah
error:
some error description
bleh
blih
% awk '/version:|hostname:/ {print; next} p {p--; print; next} /error/ {p=1; print} ' foo.txt
hostname: foo
version: 1.2.3
error:
some error description
上記とは異なり、grep -A1
上記のコマンドはすでに「次の行」にある一致から次の行の印刷をトリガーしません。これを行うには、条件を少し並べ替える必要があります。
% awk '/error/ {p=2} p {p--; print; next} /version:|hostname:/ {print}' foo.txt
hostname: foo
version: 1.2.3
error:
some error description
bleh