grep 不匹配精确的字符串

grep 不匹配精确的字符串

我有一个文件

1 IF 9/1 Joe
2 IF 9/1 Marry
3 IF 9/12 Larry 
4 IF 9/15 Page

我只想打印那些不IF 9/1使用grep.我知道我可以使用

grep -Fvx 'IF 9/1' file.txt

但由于某些原因,我没有得到预期的结果。

答案1

-x导致grep匹配整行。你需要:

grep -Fv 'IF 9/1[^[:alnum:]_]' file

答案2

问题是这9/1也将匹配9/12。所以,使用这个:

grep -Fv 'IF 9/1 ' file.txt

另外,不要使用x选项。它仅选择那些与整行完全匹配的匹配项。

答案3

是的,你说过grep,但awk如果涉及布尔条件,解决方案通常看起来不那么神秘,而且更直接:

awk '!($2=="IF" && $3=="9/1")' file.txt

答案4

您可以使用grepPCRE(Perl 兼容的正则表达式):

$ grep -P 'IF 9/1(?! )' file.txt 
3 IF 9/12 Larry 
4 IF 9/15 Page

(?! )是零宽度负先行模式,确保后面没有空格IF 9/1,即后面至少有一个除空格之外的字符。这将为您带来想要的结果。

相关内容