キーワードgrep検索後にのみファイル名を表示するにはどうすればよいですか?


15

現在、各ファイルに最大1行の非常に長いデータがあるディレクトリにn個のデータファイルがあります。私のディレクトリ構造は

director/
    data1.json
    data2.json
    data3.json

これらのファイルの少なくとも1つに探しているキーワードが含まれていることは知っていますが、1行のデータが長すぎるため、端末全体をカバーしています。キーワードgrepを実行した後にのみファイル名を取得するにはどうすればよいですか?私が使用しているgrepコマンドは次のとおりです。

grep keyword *.json

回答:


30

-l引数は、必要なことを行う必要があります。

   -l, --files-with-matches
          Suppress  normal  output;  instead  print the name of each input
          file from which output would normally have  been  printed.   The
          scanning  will  stop  on  the  first match.  (-l is specified by
          POSIX.)

7

xargsは、grepの--nullまたはackの--print0と組み合わせて使用​​できます。ackの速度が速いことがわかりました。

grep -lr --null searchterm * | xargs -I {} -0 echo {}

ack -lr --print0 searchterm * | xargs -I {} -0 echo {}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.