Answers:
因为有了,
in中的两个(,\)\(,\)
,您已经匹配了前两个,
s,并且到目前为止匹配的Regex模式不会在剩下的行中回溯。现在只剩下最后一个,,
因此它按原样打印*
,中间没有任何第二个。
如果您,
输入了其他内容,则会得到所需的(全局g
)响应:
% echo ,,,, | sed s':\(,\)\(,\):\1*\2:'g
,*,,*,
echo ,,,,, |sed s':\(,\)\(,\):\1*:’g
@heemayl 已经回答了问题的原因
解决方法sed
(此处假设为GNU sed
)-只要找到匹配项,便递归循环
$ echo ,,, | sed -E ':a s/(,)(,)/\1*\2/ ; ta'
,*,*,
$ echo ,,,, | sed -E ':a s/(,)(,)/\1*\2/ ; ta'
,*,*,*,
POSIXly:
$ echo ,,,, | sed -e :a -e 's/\(,\)\(,\)/\1*\2/; ta'
,*,*,*,
或搭配 perl
$ echo ,,, | perl -pe 's/,\K(?=,)/*/g'
,*,*,
$ echo ,,,, | perl -pe 's/,\K(?=,)/*/g'
,*,*,*,
s
,并g
带引号的出来吗?)