繁体   English   中英

grep从文件的开头(grep -f)

[英]grep from the beginning of a file (grep -f )

我使用commands | grep -f - file commands | grep -f - file中提取管道内容的文件。
但是,我想仅在匹配的字符串位于行的开头时提取。 通常我使用grep '^string' ,但它不适用于grep -f

grep -f '^-' file
grep: ^-: No such file or directory

我如何一起使用grep -f -grep '^'

grep -f用于包含模式的文件。

你不能调用grep -f '^-'因为它不会将'^-'作为模式,而是作为文件名

如果您不想使用文件,可以使用管道

grep -f - ,其中-是获取stdin / pipe而不是文件的信号。

这是一个例子

echo ^a | grep -f - file.txt echo ^a | grep -f - file.txtgrep '^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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM