Linuxでgrep
を使用してファイル名のみを表示する(インライン一致しない)にはどうすればよいですか。
私は通常次のようなものを使っています:
find . -iname "*php" -exec grep -H myString {} \;
ファイル名(パス付き)を取得する方法はありますが、一致するものはありません。 xargs
を使う必要がありますか?私はgrep
のmanページでこれを行う方法を見ませんでした。
標準オプションのgrep -l
(これは小文字のLです)がこれを行うことができます。
Unix標準から :
-l
(The letter ell.) Write only the names of files containing selected
lines to standard output. Pathnames are written once per file searched.
If the standard input is searched, a pathname of (standard input) will
be written, in the POSIX locale. In other locales, standard input may be
replaced by something more appropriate in those locales.
この場合も-H
は必要ありません。
grep(1)
のmanページから:
-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.)
単純なファイル検索のために、grepの-l
と-r
オプションを使うことができます:
grep -rl "mystring"
検索はすべてgrepによって行われます。もちろん、他のパラメータでファイルを選択する必要がある場合は、findが正しい解決策です。
find . -iname "*.php" -execdir grep -l "mystring" {} +
execdir
オプションは、各ディレクトリごとに各grepコマンドを作成し、ファイル名を1つのコマンド(+
)のみに連結します。