web-dev-qa-db-ja.com

find ... -exec grepでファイル名と行番号の両方を返す方法は?

findを使用している場合、文字列を検索するときにファイル名と行番号を返すにはどうすればよいですか?あるコマンドでファイル名と別のコマンドで行番号を返すことができましたが、それらを組み合わせることができないようです。

ファイル名:find . -type f -exec grep -l 'string to search' {} \;

行番号:find . -type f -exec grep -n 'string to search' {} \;

47
Danny_Joris

コマンドラインスイッチ-Hは、ファイルが1つしかない場合でも、grepにファイル名を出力させます。

% grep -n 7 test.in
7:7
% grep -Hn 7 test.in
test.in:7:7

   -H, --with-filename
          Print the filename for each match.

Kojiroコメント で述べているように、これはPOSIX標準の一部ではないことに注意してください。 GNUとBSD grepの両方にありますが、システムによってはそれがない場合もあります(Solarisなど)。

56
Kevin
find . -type f -exec grep -n 'string to search' /dev/null {} +

(またはGNU grepの場合、-Hオプション)

22