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

Bash grep从文件的开头开始(grep-f),bash,grep,Bash,Grep,我使用命令| 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-,其中-是获取标

我使用
命令| 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-
,其中
-
是获取标准数据/管道而非文件的信号

这里有一个例子

echo^a | grep-f-file.txt
grep'^a'file.txt

更好的用法是只从一些文件中获取一些模式,这些模式用于您的文件

grep“^PAT”patterns.txt|grep-f-myfile

这将从patterns.txt文件中获取所有模式,并使用下一个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'我的文件的内容

请注意,
^abcd
^abc
的子集。因此,字符串末尾可能有一个空格(或另一个分隔符)


grep'^abc'dict.txt|sed's/^/^;s/$/\/'| grep-f-myfile

相关:
-f
的参数是一个包含模式的文件(如果有疑问,请检查
man-grep
-f
是解决方案,我喜欢它的简单工作方式。