私のコード
$ *.php | grep google
各一致の横にファイル名と行番号を印刷するにはどうすればよいですか?
grep google *.php
多くのディレクトリにまたがる場合:
find . -name \*.php -print0 | xargs -0 grep -n -H google
(コメントで説明されているように、-H は、xargs で残りのファイルが 1 つしかない場合に役立ちます)
やってはいけない
$ *.php | grep
これは、「最初の PHP プログラムを実行し、残りの名前をパラメーターとしてワイルドカードで指定してから、出力に対して grep を実行する」ことを意味します。
そのはず:
$ grep -n -H "google" *.php
-n
フラグは行番号を実行するように指示し、フラグ-H
はファイルしかない場合でもファイル名を表示するように指示します。複数のファイルが検索されている場合、grep はデフォルトでファイル名を表示しますが、一致するファイルがいくつあるかに関係なく、出力が一貫していることを確認する必要があります。
grep -RH "google" *.php
http://betterthangrep.comで ack をご覧ください。あなたがしようとしているものに相当するものは次のとおりです。
ack google --php
find ./*.php -exec grep -l 'google' {} \;
find . -name "*.php" -print | xargs grep -n "searchstring"
他の機能を表示するには、「man grep」を使用します。
for i in $(ls *.php); do grep -n --with-filename "google" $i; done;