我用下面的例子解释了我在 Ubuntu 16.04 上的问题:文件是:
# cat file
aaa
aaaxxx
aaaxxx*aaa
aaa=aaaxxx
bbbaaaccc
aaaddd/aaaxxx
我想显示所有包含aaa
但不是唯一组合的行aaaxxx
。我想要这样的输出:
# grep SOMETHING-HERE file …
aaa
aaaxxx*aaa (second aaa is the hit)
aaa=aaaxxx (first aaa is the hit)
bbbaaaccc (aaa in any other combination but not aaaxxx)
aaaddd/aaaxxx (similar to above)
我尝试了grep -v aaaxxx file | grep aaa
以下结果:
aaa
bbbaaaccc
或者
# egrep -P '(?<!aaaxxx )aaa' file
grep: die angegebenen Suchmuster stehen in Konflikt zueinander (the pattern are in contradiction)
有没有(简单的)可能性?当然不需要grep
。谢谢
使用 perl 风格的前瞻运算符很简单 - 使用
-P
开关在 grep 的 Perl 兼容正则表达式 (PCRE) 模式下可用:(输出中的粗体格式表示以 突出显示的匹配部分
grep
)尽管零长度前瞻很方便,但您可以使用 GNU 扩展正则表达式 (ERE) 语法实现相同的输出,例如通过匹配
aaa
最多 2 个x
字符后跟一个非x
字符或行尾,即甚至使用 GNU 基本正则表达式 (BRE) 语法
匹配为