Anthony Kong Asked: 2018-06-14 16:54:22 +0800 CST2018-06-14 16:54:22 +0800 CST 2018-06-14 16:54:22 +0800 CST 为什么这个 sed 命令无法捕获模式? 772 sed我想使用oneliner在字符串周围放置一对括号。 这是我尝试过的 echo 1 | sed -e 's/.*/(\0)/' 我希望这封信1将与.*模式匹配。 但是输出只是 (0) 我实际上想得到这个结果: (1) 我sed在 OSX 上使用 BSD sed osx 3 个回答 Voted Best Answer Ignacio Vazquez-Abrams 2018-06-14T17:04:03+08:002018-06-14T17:04:03+08:00 &是替换整个模式匹配的标准方法。一些sed实现,如 GNU 或 busybox 支持\0作为替代方案,但这不是标准的,也不是可移植的。 $ echo 1 | sed -e 's/.*/(&)/' (1) 该命令包含第一个(可能为空的)字符序列,在括号内的每一行中尽可能多。对于那些包含不构成有效字符的字节的行,这可能不会包含整行,在这种情况下,您可能会发现: sed 's/^/(/; s/$/)/' 更可靠地将整行括在括号内。 schaeferpp 2018-06-15T02:51:29+08:002018-06-15T02:51:29+08:00 \1将引用第一个捕获组。由于您目前没有任何捕获组,您可以通过用大括号将匹配定义为捕获组并使用以下方法引用它\1: $ echo 1 | sed 's/\(.*\)/(\1)/' (1) Praveen Kumar BS 2018-06-20T02:05:16+08:002018-06-20T02:05:16+08:00 我已经通过下面的 awk 命令完成了 echo 1 | awk '{print "("$0")"}' 输出 (1)
&
是替换整个模式匹配的标准方法。一些sed
实现,如 GNU 或 busybox 支持\0
作为替代方案,但这不是标准的,也不是可移植的。该命令包含第一个(可能为空的)字符序列,在括号内的每一行中尽可能多。对于那些包含不构成有效字符的字节的行,这可能不会包含整行,在这种情况下,您可能会发现:
更可靠地将整行括在括号内。
\1
将引用第一个捕获组。由于您目前没有任何捕获组,您可以通过用大括号将匹配定义为捕获组并使用以下方法引用它\1
:我已经通过下面的 awk 命令完成了
输出