【问题标题】:replace string only in certain lines containing another string仅在包含另一个字符串的某些行中替换字符串
【发布时间】:2017-06-25 02:07:36
【问题描述】:

我有一个很大的 xml 文件,我只想将 weight="7.0" 替换为 weight="11.0",但仅限于包含 clockRateScaler 的行,如下所示。

   <operator id="clockRateScaler." spec="ScaleOperator" parameter="@clockRate.c" scaleFactor="0.5" weight="7.0"/>

我试过sed

sed 'clockRateScaler/s/ weight="7.0"/ weight="7.0"' file.xml 

但是没有用。

如何在 awk 或 sed 下做到这一点?

【问题讨论】:

    标签: xml awk replace sed gsub


    【解决方案1】:

    使用sed

    sed '/clockRateScaler/s/weight="7.0"/weight="11.0"/g' file.xml
    

    使用awk

    awk '/clockRateScaler/{gsub("weight=\"7.0\"", "weight=\"11.0\"")}1' file.xml
    

    或使用xmlstarlet(更好)

    xmlstarlet ed -u '/operator[@id="clockRateScaler."]/@weight' -v 11.0 file.xml
    

    你明白了,

    <operator id="clockRateScaler." spec="ScaleOperator" parameter="@clockRate.c" scaleFactor="0.5" weight="11.0"/>
    

    【讨论】:

      【解决方案2】:

      您试图用相同的字符串替换weight="7.0",但您错过了一些/

      你应该试试这个命令:

      sed '/clockRateScaler/s/weight="7.0"/weight="11.0"/' file.xml
      

      【讨论】:

        猜你喜欢
        • 2017-06-04
        • 2011-02-21
        • 1970-01-01
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-10
        相关资源
        最近更新 更多