我正在修改一个大的 txt 文件。是否有一个单行,您可以在其中用零填充右侧的字符串模式?例如,从一位或两位小数到三位。例如从 0.21 到 0.210 或 0.5 到 0.500?我正在尝试的代码:
perl -p -i -e 's/(\.\d{1,2})/\10/g' myFile.txt
在此先感谢您的帮助:)
我正在修改一个大的 txt 文件。是否有一个单行,您可以在其中用零填充右侧的字符串模式?例如,从一位或两位小数到三位。例如从 0.21 到 0.210 或 0.5 到 0.500?我正在尝试的代码:
perl -p -i -e 's/(\.\d{1,2})/\10/g' myFile.txt
在此先感谢您的帮助:)
正如Barmar 在评论中所说,您可以使用sprintf
来指定小数位数。
perl -p -i -e 's/(\d+\.\d+)/sprintf "%.3f", $1/eg' myFile.txt
笔记:
%.3f
表示小数点后 3 位的浮点数。e
flag 表示将替换端评估为表达式。$1
用于代替\1
替换端(请参阅此处的 perldoc 注释)。\1
应该是$1
。\1
在替换表达式中使用是没有意义的。如警告所示,这样做是一个错误。$10
而不是$1
。使用花括号来消除歧义 ( ${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