Regex 在unix中的sed上使用正则表达式时出现意外输出

Regex 在unix中的sed上使用正则表达式时出现意外输出,regex,unix,sed,Regex,Unix,Sed,对于上述命令,输出为 echo "abc123" | sed s/[a-z]*/TEXT/g 它不应该是text123?这是因为您使用的量词*与0个或多个[a-z]匹配。首先,它匹配abc,由于使用了g(全局)模式,它还匹配1、2、3之后的空文本 但是,如果通过使用删除*来调整正则表达式 TEXT1TEXT2TEXT3TEXT 然后你会得到: echo "abc123" | sed 's/[a-z]/TEXT/g' 谢谢,但是当我执行echo“abc123”| grep--color“[a

对于上述命令,输出为

echo "abc123" | sed s/[a-z]*/TEXT/g

它不应该是
text123

这是因为您使用的量词
*
与0个或多个
[a-z]
匹配。首先,它匹配abc,由于使用了
g
(全局)模式,它还匹配
1
2
3
之后的空文本

但是,如果通过使用删除
*
来调整正则表达式

TEXT1TEXT2TEXT3TEXT
然后你会得到:

echo "abc123" | sed 's/[a-z]/TEXT/g'

谢谢,但是当我执行echo“abc123”| grep--color“[a-z]*”时,它会给出abc123(并且只有abc是彩色的)。你认为
grep
会如何给
1,2,3
之后的空匹配着色?我不理解的是为什么命令echo“abc123”| sed s/[a-z]*/TEXT/g它给出一个输出,数字之间有一个单词TEXT。我在回答中已经解释过了
*
表示0或更多,因此它也匹配
1、2、3
之后的空字符串。查看与
echo“abc123”| sed-E's/[a-z]+/TEXT/g'
的区别,即
+
而不是
*
TEXTTEXTTEXT123