ディレクトリ内のすべてのファイルから文字列を検索する

ディレクトリ内のすべてのファイルから文字列を検索する

{{text}}すべてのファイルで見つけ、新しいファイルで赤を探したいです。試してみましたが、私には効果がありません

find . -type f -not -name "*.dll" -not -name "*.zip" -exec cat {} \; |
    grep "\{.*" | cut -d "{" -f1 | sort | uniq > keys.txt

答え1

私はあなたがこれを探していると思います:

grep -FIrho '{{text}}' . >/tmp/keys.txt
mv -f /tmp/keys.txt .

.dllまたは、除外項目とファイルが本当に必要な場合は、.zip次のようになります。

find . \( -name '*.zip -o -name '*.dll' \) -prune -o -type f -exec grep -Fho '{{text}}' {} + >/tmp/keys.txt
mv -f /tmp/keys.txt .

これkeys.txtにはゼロ行以上が含まれます{{text}}。一致する内容の代わりにファイル名を記録してもよろしいですか?それともライン全体が{{text}}存在しますか?

答え2

grep シェルとマジックを介して再帰的に呼び出すことに加えて、find一部のプログラムは困難な作業を実行できます。

たとえば、silversearcher-ag(https://geoff.greer.fm/ag/)または確認(https://beyondgrep.com/)、それは簡単です:

ack '{{text}}'

または

ag '{{text}}'

これらのツールの利点は、基本的にバイナリやディレクトリなどの検索を避け、.gitループ.svn呼び出しよりもはるかに高速です。grep

これらのツールは、主要なGNU / Linuxディストリビューションのリポジトリにあります。

関連情報