【发布时间】:2012-03-01 03:40:59
【问题描述】:
我正在尝试查找所有 Ui\. 实例,后面没有 Line,甚至只是字母 L
编写正则表达式以查找特定字符串的所有实例而不是另一个字符串的正确方法是什么?
使用前瞻
grep "Ui\.(?!L)" *
bash: !L: event not found
grep "Ui\.(?!(Line))" *
nothing
【问题讨论】:
-
正则表达式的哪个亚种 - PCRE、ERE、BRE、grep、ed、sed、perl、python、Java、C、...?
-
顺便说一句,“未找到事件”来自使用历史扩展。如果您从不使用历史扩展,您可能希望关闭它,并且有时希望能够在交互式命令中使用感叹号。
set +o histexpand在 Bash 或set +H,YMMV。 -
我也遇到了历史扩展问题。我认为我只是通过切换到单引号来解决它,所以shell不会尝试修改参数。
-
@Coderer 也解决了我的问题。谢谢。
-
@Coderer 使用单引号非常好 - 除非您希望其他(最常见的是 $)元字符处于活动状态。 '' 保护所有 metachars 免受 shell 的影响,这只是偶尔你想要的。 Tripleee 的评论是处理这个问题的最佳方式,IMO。
标签: regex grep regex-lookarounds