将具有多个模式的文件传递给 grep

将具有多个模式的文件传递给 grep

假设我们有两个文件。

匹配结果.txt:包含要匹配的模式的文件:

fed ghi
tsr qpo

数据.txt:包含以下文本行的文件:

abc fed ghi jkl
mno pqr stu vwx
zyx wvu tsr qpo

现在,我想发出一个 grep 命令,该命令应返回第一行和第三行数据.txt

abc fed ghi jkl
zyx wvu tsr qpo

...因为这两行都与匹配结果.txt

我努力了:

grep -F -f match.txt data.txt

但没有返回任何结果。

grep 信息:GNU grep 2.6.3(cygwin)
操作系统信息:Windows 2008 R2

更新:似乎 grep 对搜索模式行中的空格感到困惑,但使用 -F 标志,它应该将每一行都处理为匹配结果.txt作为单独的匹配模式。

答案1

解决方法如下:

使用命令:tr -d "\r" <match.txt | grep -F -f - text.txt

似乎grep不能正确遵循通过 -f 标志呈现给它的匹配文件的 Windows 行尾 (CR/LF)。tr可以使用该命令从匹配文件中删除回车符,并且可以将 - 特殊标志与 一起使用grep,以强制它从标准输入读取匹配文件。

答案2

因为它在 Unix 上运行,也许您需要更高版本的 grep?

>cat d
abc fed ghi jkl
mno pqr stu vwx
zyx wvu tsr qpo

>cat p
fed ghi
tsr qpo

>grep -F -f p d
abc fed ghi jkl
zyx wvu tsr qpo

如果你把模式改为

fed\040ghi
tsr\040qpo

相关内容