複数の文字列があるため、複数のファイルで検索する必要があります。たとえば、次のようになります。
string1
string2
stringn
file1.txt
file2.txt
filen.txt
Bashでこれを行う(簡単な)方法はありますか?文字列が見つかったら、その文字列がどのファイルにあるかを知る必要があります。
答え1
-eオプションを使用した単純なgrepコマンド:
grep -e "string1" -e "string2" -e "stringn" file*.txt
または、次のように、すべての検索文字列をsearch.txtというファイルに入れることができます。
string1
string2
string3
...
...
stringN
次に、-f
次のオプションを使用してgrepを実行します。
grep -f search.txt file*.txt
答え2
すべての文字列を一度に検索するには、grepを使用します。
grep -E -H 'string1|string2|stringn' file1.txt file2.txt filen.txt
-E
パイプ文字(|)をエスケープせずに使用できます。一致する各ファイル名を印刷します-H
。正規表現はパイプを使用して各文字列を分離し、grep
各文字列を順次一致させようとします。
答え3
大規模な文字列セットに対してこの機能をサポートするgrepバリアントがあります。試してみてください。
fileWithListOfSearchTargets=myFileOfSearchTargets.txt
fgrep -f ${fileWithListOfSearchTargets} file1 file2 ... filen
(変数とファイル名は独自に文書化されているため、必要な名前を使用できます。)
すべての検索文字列をファイルに入力する必要があります。
ファイルリストで一致させる必要がない限り、先頭または末尾のスペースはありません。ほとんどは、fgrep
処理できるサイズが制限されています。ファイルに10,000行をプッシュしようとしないでください。
答え4
Unix検索コマンド:
find . -exec grep "i want to find this string" '{}' \; -print
検索は現在のディレクトリから始まります。
これはまた働きます:
egrep -r 'arbitrary string' *