[英]how replace string repeated pattern at his start ,linux terminal?
我想编辑我在 linux shell 中使用正则表达式获得的字符串,但我失败了。
我想要做的是在字符串的开头将“00”的重复出现更改为“1”
让我们说: 00000120001 to 110100001
但我没有做到。
我试过:
echo 00000120001 | sed 's/^\`\<00/1/g'
但得到了 1000120001
使用 Perl 命令行:
echo 00000120001 | perl -pe 's/(?|^(.)|\G(?<=(.))\1)\1/1/g'
仅适用于零:
echo 00000120001 | perl -pe 's/\G00/1/g'
不确定你可以用一个正则表达式来做到这一点; 我有一个解决方案,可以处理sed
的保持和模式空间。
在一行中:
sed 'h;s/[^0].*//;s/00/1/g;x;s/^0*//;x;G;s/\n//' <<< '00000120001'
详细信息:
sed 'h # copy input line to hold space
s/[^0].*// # keep only 00..0 prefix in pattern space
s/00/1/g # replace double 0s by 1s in pattern space
x # swap hold and pattern spaces (hold is now 110, pattern 00000120001
s/^0*// # remove 00..0 prefix from pattern space
x # swap hold and pattern spaces (hold is now 120001, pattern 110
G # append hold space to pattern space (pattern is 110\n120001)
s/\n//' # remove \n from pattern
<<< '00000120001'
使用gnu awk
您可以执行以下操作:
echo '00000120001' | awk '$0==""{printf "1"} $0 && !index($0, "\n")
{p=1; printf $0 RS; next} $0{printf $0}' RS='00'
110120001
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.