Sed

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

  • January 15, 2017

我不明白我在這裡缺少什麼:

$ 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。

事實證明,xonsh(或 Python)正在吞噬\1sed,因此 sed 實際看到了's/([a-z]*)ing/ing/g,並且它的輸出對於該輸入當然是正確的。

我在這裡打開了一個關於它的問題,但解決方法是使用 Python 原始字元串:

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

這比轉義 ( \\1) 更可取,因為它會在 POSIX shell 中出錯,而不是繼續不希望的\1.

然而,感謝@adqm,雙引號和轉義反斜杠在 xonsh 和 bash 之間是可移植的:

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

引用自:https://unix.stackexchange.com/questions/337479