【问题标题】:How to change a line immediately following a match pattern如何在匹配模式之后立即更改行
【发布时间】:2012-09-06 04:22:39
【问题描述】:

我需要一个 sed one 班轮来立即按照模式 [lb] 更改一行:

[lb]
enabled=0

改为:

[lb]
enabled=1

提前感谢各位专家的帮助!

【问题讨论】:

    标签: sed inline-editing


    【解决方案1】:

    IMO,sed 并不是真正正确的工具,但你可以这样做:

    sed '/^\[lb\]/{ N; s/enabled=0/enabled=1/; }' input
    

    【讨论】:

    • 这正是我正在寻找的,并且工作完美。出于好奇,您认为更好的解决方案是什么?顺便说一句,谢谢
    • 我认为 awk 解决方案会更干净,或者 perl,但经过更多考虑,我认为 sed 就可以了。
    【解决方案2】:

    一种使用GNU sed的方式:

    sed -i -r '/\[lb\]/ { N; s/(enabled=)0/\11/; }' file.txt
    

    【讨论】:

      【解决方案3】:

      希望这不是你的作业。

      sed  '/\[1b\]/,+1s/enabled=0/enabled=1/' <input-file>
      

      【讨论】:

      • +1 地址不可移植。我相信它在 gnu-sed 中是有效的
      • 嘿,不是家庭作业,只是不像我想成为的 sed/awk 专家。谢谢!
      • stackflow 吃了我的“\”。在括号字符前加上反斜杠。
      【解决方案4】:

      awk 的更通用方式:

      awk 'BEGIN {RS="\\[.*\\]"; ORS=OFS="" } { gsub("enabled=0", "enabled=1"); print RT, $0 }'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2015-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多