ファイルから文字列を検索

ファイルから文字列を検索

複数の文字列があるため、複数のファイルで検索する必要があります。たとえば、次のようになります。

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' *

関連情報