使用 sed 进行重叠替换?

使用 sed 进行重叠替换?

假设我有一个输入字符串:

,,a,b,c,,,,d,e,f,,,g

是否有一个简单的 sed 命令可以在每对连续的逗号之间插入一些内容?也就是说,我可以使用什么将输入字符串转换为:

0,0,a,b,c,0,0,0,d,e,f,0,0,g

答案1

您需要使用 sed 循环:

sed 's/^,/0,/; :a; s/,,/,0,/g; ta'

记录在这里:https://www.gnu.org/software/sed/manual/sed.html#Programming-Commands

但我会使用 perl 或 awk

perl -pe 's/(?:^|,)\K(?=,|$)/0/g'
awk -F, -v OFS=, '{for (i=1; i<=NF; i++) if ($i == "") $i=0};1'

相关内容