sed 命令中的 \1 在 xonsh 下不起作用

sed 命令中的 \1 在 xonsh 下不起作用

我不明白我在这里缺少什么:

$ echo 'testing' | sed -E 's/([a-z]*)ing/\1ing/g'
ing

我希望输出testing再次出现,因为\1应该是test?该输入似乎已被吞掉 - 即该组与它相匹配 - 但为什么\1不将其吐出来?

我使用的是 macOS 10.12.2;使用 xonsh shell 和 GNU sed v4.3。

答案1

事实证明,xonsh(或Python)正在吞噬\1,因此 sed 实际上看到了's/([a-z]*)ing/ing/g,并且它的输出对于该输入来说当然是正确的。

我有在这里打开了一个问题关于它,但解决方法是使用 Python 原始字符串:

$ echo 'testing' | sed -E r's/([a-z]*)ing/\1ing/g'
testing

这比 escaping( \\1) 更可取,因为它会在 POSIX shell 中出错,而不是继续执行不需要的操作\1

然而,感谢@adqm,双引号和转义反斜杠在 xonsh 和 bash 之间是可移植的:

$ echo 'testing' | sed -E "s/([a-z]*)ing/\1ing/g"

相关内容