サブディレクトリ内のファイルから文字列を検索したい。bundle/ にいるように。バンドル/には、複数のサブディレクトリと複数のtxtファイルがあり、次のようなことをしたい
find . -type f -exec grep "\<F8\>" {} \;
文字列を含むファイルを取得したい < F8 >
このコマンドは機能し、文字列を見つけますが、ファイル名を返すことはありません
grep -rl '<F8>' .
この-r
オプションは、次のディレクトリから再帰的に検索するように grep に指示します。.
この-l
オプションは、行自体ではなく、一致したファイル名のみを表示するように指示します。
出力は次のようになります。
./thisfile
./foo/bar/thatfile
これを 1 つのファイルのみに制限する場合は| head -1
、行末に追加します。
次のような出力が必要な場合:
./thisfile:My text contains the <F8> string
./foo/bar/thatfile:didn't remember to press the <F8> key on the
その後、オプションをオフのままにすることができ-l
ます。ファイル名にはコロンが含まれる可能性があり、ファイル名のコロンは grep の出力ではエスケープされないため、この出力は安全に解析できないことに注意してください。
単体でも使えgrep
ます。
grep -r '<F8>' .
個人的には、 を使用する方が簡単だと思いますack
。(ack-grep
は、同じ名前の別のソフトウェアと混同しないように、Ubuntu のリポジトリで使用される名前です。) ほとんどの主要なリポジトリで利用できます。
コマンドはack -a "<F8>"
(またはack-grep -a "<F8>"
Ubuntuで)になります。オプションは、-a
すべてのファイル タイプを検索することです。
例:
テストファイル
Line 1
Line 2
Line 3
<F8>
<F9>
<F10>
Line 4
Line 5
Line 6
出力:
$ ack -a "<F8>"
testfile
4:<F8>
これにより、一致するすべてのファイルと行番号が一覧表示されます。
grep -nR '<F8>' *