我grep -w -f
用来从文件中提取与模式匹配的行。但是,如果输入模式文件中的模式不完全匹配,则似乎掩盖了稍后在输入模式文件中出现的完全匹配。我还有其他grep
选择吗?例如:
$ head list
tt140
tt1351
tt1354
tt998
tt1122
$ head match1
tt135
tt1122
tt1351
$ grep -w -f match1 list
tt1122
看来第一个模式tt135
会match1
干扰后面的模式tt1351
。如果第一行被删除,tt1351
则报告匹配。
$ head match2
tt1122
tt1351
$ grep -w -f match2 list
tt1351
tt1122
这是预期的行为吗?还有另一种选择grep
可以避免这种情况吗?
确实,如@japyal所述,BSD版本的BSD中grep
似乎存在错误(这也影响OSX)。
解决方法:
grep -f <(sed 's/.*/\\<&\\>/' match1) list
这会将字符串动态地封装match1
在显式的单词边界正则表达式断言中,就好像match1
已定义为:
\<tt135\>
\<tt1122\>
\<tt1351\>
最终效果与-w
已指定的效果相同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句