当一个短语是一个变量时,它会被轻击

时间:2016-07-24 15:18:06

标签: bash grep

我有一个主文件,我用它作为查找,我有搜索字符串是短语。

我目前的尝试是

for i in `cat list`              #list contains the phrases that I'm looking for
do 
grep $i master.file
done

然而,由于我的初始搜索项目(在这种情况下是$ i)是一个短语,我遇到了很多不匹配。例如,如果短语是“Blah for the”那么我会得到很多匹配,其中包含“the”或“for”但不是完整模式。从命令行我可以做到

grep "Blah for the" master.file

这给了我有意义的结果。 如何从脚本中获得相同的结果?

一种可能的解决方案是将我的短语和主文件中的空格分开。但这很难看。

任何帮助表示赞赏。 谢谢!

2 个答案:

答案 0 :(得分:3)

grep-f选项从文件中读取换行符分隔的模式:

grep -f list master.file

另请注意,如果要搜索固定字符串而不是正则表达式模式,还需要-F选项:

grep -Ff list master.file

答案 1 :(得分:2)

有几种可能性。如果我理解正确,你想循环遍历行而不是文件中的单词。这里指出了两种可能的方法: https://unix.stackexchange.com/questions/7011/how-to-loop-over-the-lines-of-a-file

您可以使用IFS=$'\n'将换行符设为唯一的分隔符,也可以使用相同的代码。链接答案中指出的另一种可能性是使用read

while IFS= read -r i; do
    grep "$i" master.file
done < list