为什么这个 sed 命令无法捕获模式?

Ant*_*ong 3 osx sed

我想使用sedoneliner在字符串周围放置一对括号。

这是我尝试过的

echo 1 | sed -e 's/.*/(\0)/'
Run Code Online (Sandbox Code Playgroud)

我希望这封信1将与.*模式匹配。

然而,输出只是

(0)
Run Code Online (Sandbox Code Playgroud)

我实际上想得到这个结果:

(1)
Run Code Online (Sandbox Code Playgroud)

sed在 OSX 上使用 BSD

Ign*_*ams 6

&是替换整个模式匹配的标准方法。一些sed实现,如 GNU 或 busybox 支持\0作为替代,但这不是标准的,也不是可移植的。

$ echo 1 | sed -e 's/.*/(&)/'
(1)
Run Code Online (Sandbox Code Playgroud)

该命令将第一个(可能是空的)字符序列括在括号内的每一行中,尽可能多。对于那些包含未形成有效字符的字节的行,这可能不会包含完整行,在这种情况下,您可能会发现:

sed 's/^/(/; s/$/)/'
Run Code Online (Sandbox Code Playgroud)

更可靠地将整括在括号内。