Sed
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。
事實證明,xonsh(或 Python)正在吞噬
\1
sed,因此 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"