複数の条件を使用する Grep コマンド

複数の条件を使用する Grep コマンド

どのように組み合わせることができますか?

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

おすすめ記事