パターン/文字列に一致するN個未満の行を含むファイルのリスト

パターン/文字列に一致するN個未満の行を含むファイルのリスト

編集する

以下の条件を達成するために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)、計算は停止します。

関連情報