Linux 使用sed的就地反向引用

Linux 使用sed的就地反向引用,linux,sed,backreference,in-place,Linux,Sed,Backreference,In Place,有人能解释一下原因吗 sed -re 's/(e)\1{2,}/ee/g' filename 输出(根据需要) 但是 给我 sed: -e expression #1, char 16: Invalid back reference 我试过在不同的地方摆弄并放置转义括号,但我不确定现在还能做什么。因为-ire指定re作为-I的参数,而不是sed的选项 将-i指定为单独的选项可以很好地工作 sed -i -re 's/(e)\1{2,}/ee/g' file 这很奇怪。我在FreeBSD中看

有人能解释一下原因吗

sed -re 's/(e)\1{2,}/ee/g' filename
输出(根据需要)

但是

给我

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

我试过在不同的地方摆弄并放置转义括号,但我不确定现在还能做什么。

因为
-ire
指定
re
作为
-I
的参数,而不是
sed
的选项

-i
指定为单独的选项可以很好地工作

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

这很奇怪。我在FreeBSD中看到了类似的错误,它使用的是完全不同的sed。我的猜测是,sed的大小写不敏感不是通过假设每个字母都是该字母的两个大小写的集合来实现的,并且反向引用不知道要查找什么。您将看到
sed-re的/([Ee])\1{2,}/Ee/g'
工作正常。也许您可以手动重构sed脚本。您能提供更多关于您试图解决的总体问题的背景信息吗,或者这个问题纯粹是学术性的吗?您的示例可以简化为
's/eee*/ee/g'
非常确定这是一个副本,但无法找到一个好的目标将其标记为副本。
sed: -e expression #1, char 16: Invalid back reference
sed -i -re 's/(e)\1{2,}/ee/g' file