我有一堆字符串,我需要在几个文件中找到它们,例如:
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' *