使用sed实现就地替换反向引用

3

有人可以帮忙解释为什么吗?

sed -re 's/(e)\1{2,}/ee/g' filename

输出(如期望的那样)

Jeep

但是

sed -ire 's/(e)\1{2,}/ee/g' filename

给我
sed: -e expression #1, char 16: Invalid back reference

我已经尝试了一些调整,尝试在不同的地方加入转义括号,但现在我不确定还能做什么。


非常好奇。我在FreeBSD中看到了一个类似的错误,它使用了完全不同的sed。我猜测sed的大小写不敏感性并没有通过假设每个字母都是该字母的两种情况的集合来实现,并且反向引用不知道要查找什么。您会发现sed -re 's/([Ee])\1{2,}/ee/g'可以正常工作。也许您可以手动重构sed脚本。 - ghoti
你能否提供更多关于你尝试解决的整体问题的背景,或者这个问题纯粹是学术性质的? - ghoti
你的例子可以简化为's/eee*/ee/g' - tripleee
很确定这是一个重复的问题,但找不到一个好的目标来标记它。 - tripleee
1个回答

4

因为-irere指定为-i的参数,而不是sed的选项。

-i指定为单独的选项即可正常工作。

sed -i -re 's/(e)\1{2,}/ee/g' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接