2017-11-01 5 views
0

私は文字列のすべてのtxtファイルを検索し、一致を出力する小さなスクリプトを持っています。一致が見つかった場合にのみ、ファイル名を一致の上に表示する方法はありますか?私は、スクリプトの最後にファイル名を追加しようとしましたが、今、それはファイル名だけではなく試合を表示AWKが一致するファイル名を表示するにはどうすればよいですか?

find . -iname "*.txt" -print0 | xargs -0 awk -v RS='' 'tolower($0) ~ /cool/;' 

find . -iname "*.txt" -print0 | xargs -0 awk -v RS='' 'tolower($0) ~ /cool/{print FILENAME};' 

答えて

3

あなたが行を印刷していない、変更がprint $0を意味し、として不足しているときに、デフォルトの文は{print}ですあなたの最初のスクリプトで。

+0

は完璧に動作します。ありがとう! :) – MilMike

2

とはるかに簡単な方法があります現在、私はこれを使用していますgrepワンライナー

grep -rio 'cool' --include=*.txt 
  • -r - プロセスを再帰的に

  • -i - 無視するケース

  • -o - 印刷のみマッチした部分文字列/部品

  • --include=*.txt - 名前が*.txt


一致したファイルのみを検索します

ou TPUTは、ファイル名が含まれていると一致する必要があります/フォーマットの一部が見つかりました:引数なしで

... {print $0, FILENAME} ... 

print

<filename1>.txt:cool 
<filename2>.txt:cOol 
<filename3>.txt:COOL 
... 
+1

@αғsιιη、*一致するファイルが1つ*あってもファイル名を出力します。テストしました。少なくともgrep(GNU grep)2.25' – RomanPerekhrest

+0

に感謝します。 Grepはおそらくawkより効率的ですが、RS変数(Record Separator)を使って段落全体の内容を取得しています。おそらくまた、正規表現のための解決策もあります、私は確信していません。しかし、ありがとう!確かに便利だろう。 :) – MilMike

関連する問題