grep有许多不同的字符串

grep有许多不同的字符串,grep,Grep,我有一个文件strings.txt,包含100个字符串,每个字符串一行 string1 string2 ... string100 对于这些字符串中的每一个,我想找到文件\u to_look.txt中包含该字符串的所有行。现在,我可以运行grep100次,比如grepstring1文件到\u look.txt,然后grepstring2文件到\u look.txt,等等,但这会占用我很多打字时间 有没有一种方法可以让我不用打字 编辑:解决方案最好只通过文件\u到\u look.txt一次而不是

我有一个文件
strings.txt
,包含100个字符串,每个字符串一行

string1
string2
...
string100
对于这些字符串中的每一个,我想找到
文件\u to_look.txt
中包含该字符串的所有行。现在,我可以运行
grep
100次,比如
grepstring1文件到\u look.txt
,然后
grepstring2文件到\u look.txt
,等等,但这会占用我很多打字时间

有没有一种方法可以让我不用打字

编辑:解决方案最好只通过
文件\u到\u look.txt
一次而不是100次,因为我的
文件\u到\u look.txt
相当大。

读行时;执行grep“$line”文件\u至\u look.txt;donewhile read line; do grep "$line" file_to_look.txt; done < strings.txt
这正是你要求的。用“;”替换您认为合适的换行符

xargs是人们会建议的另一种选择。我的建议是首先寻找另一种选择,因为xarg有一系列的陷阱,这些陷阱会让事情变得非常糟糕

读取行时;执行grep“$line”文件\u至\u look.txt;done
这正是你要求的。用“;”替换您认为合适的换行符

xargs是人们会建议的另一种选择。我的建议是首先寻找另一种选择,因为xarg有一系列的陷阱,这些陷阱会让事情变得非常糟糕


通常xargs用于重复具有多个值的命令:

xargs -I{} grep {} file_to_look.txt < strings.txt
xargs-I{}grep{}文件_to_look.txt
通常xargs用于重复具有多个值的命令:

xargs -I{} grep {} file_to_look.txt < strings.txt
xargs-I{}grep{}文件_to_look.txt
您可以在阅读时使用
,如下所示:

cat strings.txt | while read line ; do grep "$line" file_to_look.txt ; done
有关更多替代方法,请查看:


您可以在阅读时使用
,如下所示:

cat strings.txt | while read line ; do grep "$line" file_to_look.txt ; done
有关更多替代方法,请查看:


-f
用于传递(GNU)grep模式文件

grep -f strings.txt file_to_look.txt

-f
用于传递(GNU)grep模式文件

grep -f strings.txt file_to_look.txt

您可以使用以下简短脚本执行此操作:

#!/bin/bash

file_name=string.txt
file_to_look=file_to_look.txt
patterns=$(tr '\n' '|' $filename)
patterns=${patterns%?} # remove the last |
grep -E $patterns $file_to_look

这将把您所有的搜索模式汇总在一起,并使用
-E
选项一次将其交给
grep
,因此
grep
只需通过
file\u to\u look.txt
解析一次,而不是100次。

您可以使用以下短脚本进行解析:

#!/bin/bash

file_name=string.txt
file_to_look=file_to_look.txt
patterns=$(tr '\n' '|' $filename)
patterns=${patterns%?} # remove the last |
grep -E $patterns $file_to_look

这将把您所有的搜索模式集中起来,并使用
-E
选项一次性将其交给
grep
,因此
grep
只需通过
file\u to\u look.txt
解析一次,而不是100次+1它是对输入文件进行1次检查还是100次检查?它读取模式文件一次,然后扫描输入文件一次,所以只扫描1次。这似乎是最优雅的方法+1它是对输入文件进行1次扫描还是100次扫描?它读取模式文件一次,然后扫描输入文件一次,所以只扫描1次。