我遇到的问题可以等于乘以10的问题。第一种方法是:
perl -pi -e 's/(\d+)/\1 0/g' myfile.txt
但是这会引入额外的空间,我不能把 \ 10 ,因为这样的组不存在。 我的解决方案是这种解决方法
perl -pi -e 's/(\d+)/\1\l0/g' myfile.txt
到小写 0,但我确信有一种我不知道的正确方法。
问候。
答案 0 :(得分:8)
您应该在替换中使用$1
表单而不是\1
。这实际上是其中一个原因:使用变量形式,您可以说${1}0
。
答案 1 :(得分:5)
请勿在替换的RHS上使用\1
表示法。使用$1
。
一般来说,backrefs和八进制表示法之间存在歧义问题。或者是。现在已经解决了。
在最新版本的Perl中,当您需要明确表示反向引用时,可以使用\g{1}
,当您需要明确表示八进制数时,可以使用\o{1}
。
答案 2 :(得分:4)
答案 3 :(得分:0)
我想扩展eugene的答案,只是为了更精确地包含数字。特别是如果你要做的事情除了乘以十之外,就像除以一半。
perl -pi -e 's/(?<!\d|\.)(\d+(?:\.\d+)?)(?!\d|\.)/$1 * 10/ge' file.txt
此处还有忽略十六进制格式或百分比颜色的版本。如果你正在修改css,那就很方便。
perl -pi -e 's/(?<!#|\d|\.)(\d+(?:\.\d+)?)(?!%|\d|\.)/$1 * 10/ge' file.txt