为什么不[0-9] +匹配" 123" in" 123 abc"用sed?

时间:2016-02-13 20:36:08

标签: regex sed

我试过了 -

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之前的空格。这是否意味着第一个字符是数字?

2 个答案:

答案 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]+/& &/'启用扩展正则表达式,它支持+而不引用。或者在原始命令中使用\+而不是+(在基本正则表达式模式下使用)。

相关问题