【问题标题】:How do I use sed for selective replacement of certain lines如何使用 sed 选择性替换某些行
【发布时间】:2016-04-27 11:06:29
【问题描述】:

我在文件中有如下文本:

Line 1
Line 2
WORD1
Line3
Line 4
WORD2
Line5

我想替换 WORD1 和 WORD2 之间的所有行以产生最终输出:

Line 1
Line 2
NEW
LINES
XXXXX
Line5

使用sed '/WORD1/,/WORD2/d' input.txt,我可以删除这些行,但如何替换它们而不是删除它们?

【问题讨论】:

  • 试试sed '/WORD1/,/WORD2/{s/.*/foo/}' file
  • @AvinashRaj 将为之间的每一行打印相同的内容。试试sed '/WORD1/{:1;N;/WORD2/!b1;s/.*/foo/}'

标签: linux bash text sed


【解决方案1】:

这可能对你有用(GNU sed):

sed '/WORD1/,/WORD2/c\NEW\nLINES\nXXXXX' file

这使用范围匹配和c(更改)命令。

【讨论】:

    【解决方案2】:

    一种方式:

    替换文本文件:

    $ cat rep
    NEW
    LINES
    XXXXX
    

    输入文件:

    $ cat file
    Line 1
    Line 2
    WORD1
    Line3
    Line 4
    WORD2
    Line5
    

    sed 命令:

    $ sed '/WORD1/,/WORD2/{
    > /WORD2/r rep
    > d
    > }' file
    

    sed 命令搜索 WORD1 到 WORD2 的行范围并删除这些行(d),当遇到 WORD2 时,它会转储替换文件的内容(r rep)。

    【讨论】:

      【解决方案3】:

      如果 awk 没问题,那么试试这个:

      awk '/WORD1/{p=1; print "NEW\nLINES\nXXXXX"}; !p; /WORD2/{p=0}' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-05
        • 2018-05-24
        • 1970-01-01
        • 2017-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多