1

我正在修改一个大的 txt 文件。是否有一个单行,您可以在其中用零填充右侧的字符串模式?例如,从一位或两位小数到三位。例如从 0.21 到 0.210 或 0.5 到 0.500?我正在尝试的代码:

perl -p -i -e 's/(\.\d{1,2})/\10/g' myFile.txt

在此先感谢您的帮助:)

4

2 回答 2

2

正如Barmar 在评论中所说,您可以使用sprintf来指定小数位数。

perl -p -i -e 's/(\d+\.\d+)/sprintf "%.3f", $1/eg' myFile.txt

笔记:

  • %.3f表示小数点后 3 位的浮点数。
  • eflag 表示将替换端评估为表达式。
  • 另请注意,您必须捕获整个数字(不仅仅是小数点后的数字)才能正常工作。
  • $1用于代替\1替换端(请参阅此处的 perldoc 注释)。
于 2013-07-02T13:09:43.627 回答
2
  • \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
于 2013-07-02T02:17:45.637 回答