grep -f
用于包含模式的文件。
你不能打电话grep -f '^-'
因为它不会采取'^-'
作为模式,但作为文件名
如果不想使用文件,可以使用管道
grep -f -
,其中-
是获取标准输入/管道而不是文件的信号。
这是一个例子
echo ^a | grep -f - file.txt
是相同的grep '^a' file.txt
更好的用法是仅从某些文件中获取一些模式,并将该模式用于您的文件
grep '^PAT' patterns.txt | grep -f - myfile
这将从文件 Patterns.txt 中获取以 PAT 开头的所有模式,并使用下一个 grep 中的此模式在 myfile 中进行搜索。
因此,您可以在文件 Patterns.txt 中包含字典,并使用它在 myfile 文件中进行搜索。
如果您有某种字典(文件中的字符串列表,以换行符分隔)并希望将其用作在行开头包含字符串的模式,并且您没有^
在字典中,你可以使用 sed
grep '^abc' dict.txt | sed 's/^/^/g' | grep -f - myfile
所以,给定文件 dict.txt
a
abc
abcd
fbdf
首先 grep 获取“abc”和“abcd”,并在它们前面加上前缀^
并调用类似的东西grep -e '^abc' -e '^abcd' myfile
注意^abcd
是一个子集^abc
。所以你的字符串末尾可能会有一个空格(或另一个分隔符)
grep '^abc' dict.txt | sed 's/^/^/;s/$/\ /' | grep -f - myfile