当我运行以下内容时:
$ echo "123 abc" | sed 's/[0-9]*/&/'
输出:123 abc
但是当我运行以下命令时:
echo "123 abc" | sed 's/[0-9]*/<&>/'
输出为:<123> abc
为什么不输出<123 abc>
?
答案 0 :(得分:4)
sed
命令后的表达式用于搜索&amp;取代
[0-9]*
部分是搜索,它描述了应该用regex的符号替换哪个表达式。在提供[0-9]*
作为正则表达式时,您要求sed
在文本中找到数字0到9的任何序列,并将其替换为替换表达式。
<&>
部分是替换,它描述了应该替换前表达式的表达式。 &
字符很特殊,允许您引用搜索正则表达式找到的令牌。
在您的第一个示例中,您使用了&
来保留正则表达式找到的数字部分,在后面的示例中,您使用了<&>
来包装正则表达式在{{{}中找到的数字部分。 1}}。