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
是解决方案,我喜欢它的简单工作方式。