【问题标题】:Need to replace only select values on particular line in text file只需要替换文本文件中特定行上的选择值
【发布时间】:2013-11-23 23:25:10
【问题描述】:

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; ? 任何帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: string perl text-files substitution


    【解决方案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) 获取特定的浮点数格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 2017-11-03
      • 2014-05-20
      相关资源
      最近更新 更多