需要仅替换文本文件中特定行的选择值

时间:2013-11-12 00:14:11

标签: string perl text-files substitution

非常新的perl,我只是想修改文本文件中特定行的值。该行写道:

  1.0040      1.0033      1.0021      0.9997      0.9997      0.9997

我想将1.0000替换为小于1的任何值,但仍将所有值保持为1或更大,并将所有数字保留在文本文件中的“原始”位置(包括修改后的位置)。有时需要进行可视化检查,如果修改后的文件中的所有内容都在同一个位置,则会更容易。新行应为:

  1.0040      1.0033      1.0021      1.0000      1.0000      1.0000 

我可以采取以下措施:       $ _ = ~s / [只需更换少于1的值的一些逻辑] /1.0000/g; ? 任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

当然,并不难。 /e修饰符允许您指定一个表达式,其结果将用作s///中的替换。你可以在那里放一个条件:

s {
  ([\d\.]+)                 # Given some floating-point number,
} {
  $1 < 1.0 ? "1.0000" : $1  # replace iff less than 1.0.
}xge;

压扁:

s/([\d\.]+)/$1 < 1 ? "1.0000" : $1/ge

如果您最终需要更复杂的替换逻辑,您也可以使用例如sprintf("%1.4f", $x)获取特定的浮点数格式。