我使用commands | grep -f - file从文件中提取管道内容。
但是,我只想在匹配的字符串位于行的开头时提取。我通常使用grep '^string',但它不适用于grep -f。
grep -f '^-' file
grep: ^-: No such file or directory如何同时使用grep -f -和grep '^'?
发布于 2013-06-09 20:59:40
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中,用它来搜索我的文件。
如果您有某种类型的字典(文件中的字符串列表,由换行符分隔),并且希望将其用作在行首包含字符串的模式,而字典中没有^,则可以使用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
https://stackoverflow.com/questions/17009482
复制相似问题