我正在修改一个大的txt文件。是否有一个单行使用零填充字符串模式?例如,从一个或两个小数位到三位。例如从0.21到0.210或0.5到0.500?我正在尝试的代码:
perl -p -i -e 's/(\.\d{1,2})/\10/g' myFile.txt
提前感谢您的任何帮助:)
答案 0 :(得分:2)
\1
应为$1
。在替换表达式中使用\1
是没有意义的。如警告所示,这样做是一个错误。$10
而不是$1
。使用curlies消除歧义(${1}0
)。解决方案:
perl -i -pe's/\.\d(\d)?\K/ defined($1) ? "0" : "00" /eg' myFile.txt
perl -i -pe's/\.(\d{1,2})\K/ "0" x (3 - length($1)) /eg' myFile.txt
perl -i -pe's/\.\d(?!\d)\K/0/g; s/\.\d\d\K/0/g;' myFile.txt
答案 1 :(得分:2)
作为Barmar said in the comment,您可以使用sprintf
指定小数位数。
perl -p -i -e 's/(\d+\.\d+)/sprintf "%.3f", $1/eg' myFile.txt
注意:
%.3f
表示带有3位小数的浮点数。e
标志表示将替换方评估为表达式。$1
代替\1
(有关此内容,请参阅perldoc note here)。