我正在使用linux命令行中的正则表达式示例。 具体来说,我正在查看正则表达式'*'限定符,该限定符引用'前一个元素的零次或多次出现' 在下面的简单示例中,很明显为什么'rrr'被'x'替换为
[..~]$ echo rrr | sed -re 's/r*/x/g'
x
我不清楚以下两个例子中发生了什么:
[..~]$ echo f | sed -re 's/r*/x/g'
xfx
[..~]$ echo fd | sed -re 's/r*/x/g'
xfxdx
sed是否遇到'f'作为文本流中的第一个元素并确定'r'出现零,将'x'传递给stdout后跟'f'?如果是这样,为什么会有一个尾随'x'?
答案 0 :(得分:0)
echo f | sed -re 's/r*/x/g'
xfx
asterix寻址任意数量的前面的表达式,0,1或723次。所以f前面没有r,f后面有0个rs。你正在寻找0重复,用x代替。
对于至少一个r,您将使用+:
echo f | sed -re 's/r+/x/g'
f
原则上,同样适用于此,除了在f和d之间,还有另一种模式,匹配零或更多rs。
echo fd | sed -re 's/r*/x/g'
xfxdx
答案 1 :(得分:0)
当你要求"零或更多"然后无处可放置的东西将匹配并被替换 - 例如,在字符串中的每个字符之间以及字符串的开头和结尾之间的空格中存在零r
。
所以你真的不是指零和更多" - 你的意思是"一个或多个"因为如果首先有一些r
,你只希望它匹配r
的序列。 "零或更多"确实意味着你可以拥有r
,但不要吝啬。