45 を使用する場合find、文字列を検索するときにファイル名と行番号を返すにはどうすればよいですか?あるコマンドでファイル名を返し、別のコマンドで行番号を返すことができますが、それらを結合することはできません。 ファイル名: find . -type f -exec grep -l 'string to search' {} \; 行番号: find . -type f -exec grep -n 'string to search' {} \; grep find — ダニー・ジョリス ソース
51 コマンドラインスイッチは、ファイルが1つだけであっても、ファイル名を-H強制的に出力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. することを注意小次郎がで述べているコメント、これはPOSIX標準の一部ではありません。GNUとBSDの両方のgrepにありますが、一部のシステムに含まれていない可能性があります(Solarisなど)。 — ケビン ソース 4 この答えは、-Hフラグgrepが非標準のGNU拡張であることを指摘し、非GNUシステムの代替アプローチを提示することで改善できます。 — 小次郎
22 find . -type f -exec grep -n 'string to search' /dev/null {} + (またはGNU grepを使用、-Hオプションを参照) — ステファン・シャゼラス ソース +と-Hの両方がうまくいきます、ありがとう! — ダニージョリス :そして、この回答に関連unix.stackexchange.com/questions/3682/... — Danny_Joris 4 +1正しい。grep複数のファイル名引数を持つようにすると、一致するファイル名を強制的に出力するからです。賢い! — 小次郎
-1 grepが再帰-rフラグをサポートしている場合、これにより要求が解決されます。 grep -rn "String to search " * — ジェイ ソース 1 それは本当ですが、これが既存の答えに追加するものがわかりません。 — ワイルドカード また、現在のディレクトリに(ドット以外の)ファイルが1つしかない場合、ファイルの名前は表示されません。 — G-Manが「Reinstate Monica」と言う
-H
フラグgrep
が非標準のGNU拡張であることを指摘し、非GNUシステムの代替アプローチを提示することで改善できます。