編集する
以下の条件を達成するためにGREPとFINDの両方を使用するコマンドを探しています。
各ログファイルには、2回表示される文字列パターン「226 Transfer Complete」が含まれています。一部のファイルでは一度だけ表示されるか、ゼロとして表示されます。 0番と1番のファイル名のリストをキャプチャする必要があります。次のコマンドは、ファイルに検索パターンが見つからない場合にのみ機能します(つまり、カウントが「0」の場合にのみ機能します)。
find . -type f -name "*.log" ! -exec grep -q "226 Transfer complete." {} \; - print
私はgrepバージョン(GNU grep)2.20を使用しています。また、結果をテキストファイルとしてキャプチャする必要があります。
答え1
grep -lR '226 Transfer complete\.' --include='*.log'
答え2
これを使用awk
して発生回数を計算し、回数が次より小さい場合はファイル名を印刷できますn
。
find . -type f -name \*.log -exec awk -vn=2 'BEGIN{c=0};
/PATTERN/{++c; if (c==n){exit}};END{if (c<n){print FILENAME}}' {} \;
一致するものが見つかるとn
(この場合2
)、計算は停止します。