繁体   English   中英

如何在他的开始,linux 终端替换字符串重复模式?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM