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次。