我有一个文件
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
您可以使用grep
PCRE(Perl 兼容的正则表达式):
$ grep -P 'IF 9/1(?! )' file.txt
3 IF 9/12 Larry
4 IF 9/15 Page
(?! )
是零宽度负先行模式,确保后面没有空格IF 9/1
,即后面至少有一个除空格之外的字符。这将为您带来想要的结果。