我试过了 -
echo "abc 456" | sed 's/[0-9]+/& &/'
并期待" abc 456 456",但它只是打印" abc 456"。
不是[0-9] +应该找到1个或更多个'数字?
另外,如果我尝试 -
echo "abc 456" | sed 's/[0-9]*/& &/'
它打印" abc 456"。注意abc之前的空格。这是否意味着第一个字符是数字?
答案 0 :(得分:6)
不使用-r
标记sed
,它使用BRE语法而不是ERE。 +
是ERE扩展名。
echo "abc 456" | sed -r 's/[0-9]+/& &/'
至于其他问题分支:*
匹配0或更多字符,所以
echo "abc 456" | sed 's/[0-9]*/& &/'
...根本不需要任何数字(实际上可以匹配空字符串),因此它不会显示有关起始位置是否被视为数字的任何内容。< / p>
答案 1 :(得分:-1)
sed知道两种类型的正则表达式,简称:基本和扩展,简而言之:使用echo "abc 456" | sed -r 's/[0-9]+/& &/'
启用扩展正则表达式,它支持+
而不引用。或者在原始命令中使用\+
而不是+
(在基本正则表达式模式下使用)。