我想使用sed
oneliner 在字符串周围放置一对括号。
这是我尝试过的
echo 1 | sed -e 's/.*/(\0)/'
我希望字母1
与图案相匹配.*
。
然而输出只是
(0)
我其实想得到这样的结果:
(1)
sed
我在 OSX 上使用 BSD
答案1
&
是替代整个模式匹配的标准方法。一些sed
实现(例如 GNU 或 busybox)支持\0
作为替代方案,但这不是标准的,也不是可移植的。
$ echo 1 | sed -e 's/.*/(&)/'
(1)
该命令包含第一个(可能是空的)序列人物,每行括号内尽可能多。对于那些包含不形成有效字符的字节的行,这可能不会包含整行,在这种情况下,您可能会发现:
sed 's/^/(/; s/$/)/'
工作更可靠,封闭完整线括号内。
答案2
\1
将引用第一个捕获组。由于您当前没有任何捕获组,因此您可以通过用大括号将匹配定义为捕获组,并使用以下命令引用它\1
:
$ echo 1 | sed 's/\(.*\)/(\1)/'
(1)
答案3
我已经通过下面的 awk 命令完成了
echo 1 | awk '{print "("$0")"}'
输出
(1)