假设我们有两个文件。
匹配结果.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