许多人说在正则表达式中我们可以不使用懒惰量词,但我最近遇到了一个问题,没有它们我无法解决(这里我使用的是sed)。
我想处理的字符串由以单词rate分隔的子字符串组成,例如:
我想处理的字符串由以单词rate分隔的子字符串组成,例如:
anfhwe9.<<76xnf9247 rate 7dh3_29snpq+074j rate 48jdhsn3gus8 rate
我希望将那些子字符串(除了单词“rate”)替换为每个3个破折号(---); 结果应该是:
---rate---rate---rate
据我了解(我不懂Perl),使用惰性量词可以很容易地实现。在vim中也有惰性量词;我使用以下命令完成了此操作:
:s/.\{-}rate/---rate/g
\{-}
告诉 Vim 匹配尽可能少的字符。
不过,Vim 只是一个文本编辑器,我需要在许多机器上运行这个脚本,其中一些机器没有安装 Perl。如果您可以告诉正则表达式不匹配类似于 .*[^(rate)]rate
的原子分组,则也可以解决此问题,但这种方法并不奏效。
有什么办法可以使用 POSIX 正则表达式来实现这个功能吗,或者说这是不可能的?