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

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

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

回答

コマンドラインスイッチ-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など)にない可能性があります。

コメント

  • この回答は、-Hフラグが

非標準のGNU拡張機能であり、非GNUシステムの代替アプローチを提供します。

回答

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

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

コメント

  • +と-Hの両方がうまく機能します、ありがとうございます!
  • そしてこの回答に関連するもの: unix.stackexchange.com/questions/3682/ …
  • +1そうです。grepに複数のファイル名引数を持たせると、一致したファイル名が強制的に出力されるためです。賢い!

回答

grepが再帰的な-rフラグ、これでリクエストが解決されます:

grep -rn "String to search " * 

コメント

  • その'は本当ですが、'これが既存の回答に何を追加するのかわかりません。
  • 1つしかない場合(ドット以外) )現在のディレクトリにあるファイル。ファイルの名前は表示されません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です