搜索文件上的字符串

搜索文件上的字符串

我有一堆字符串,我需要在几个文件中找到它们,例如:

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可以处理的大小是有限的。不要试图将 10K 行塞进一个文件中。

答案4

Unix 查找命令:

find . -exec grep "i want to find this string" '{}' \; -print

将从当前目录开始搜索。

这也有效:

egrep -r 'arbitrary string' *

相关内容