Answers:
在Perl(和PCRE)中,这可以通过零宽度的隐藏实现:
(?<=funnyword).*$
匹配“ funnyword”,但不作为匹配的一部分使用。这些仅适用于后面的定长文本。您也可以使用否定的lookbehinds((?<!...)
)来指定某些文本不存在。
在任何合理的Perl最新版本中,\K
几乎可以完全替代\zs
您使用的Perl :
funnyword\K.*$
\K
丢弃到目前为止匹配的所有内容,但从那时起继续匹配。之前的部分\K
不必固定长度。这也是在PCRE现在,但我不知道它排在什么版本。
\ze
可以使用零宽度的超前功能来实现(?=...)
。该模式不需要固定长度。
因为sed使用POSIX BRE,所以没有环顾四周。但是,在这种情况下,您可以使用普通的捕获组轻松地对其进行仿真:
sed -e 's/\(funnyword\).*$/\1otherword/'
您也可以这样做,以实现积极的前瞻性。如果您确实有更复杂的要求,则可能需要使用Perl或其他方法。