【问题标题】:sed replace only after condition is metsed 仅在满足条件后替换
【发布时间】:2016-03-30 10:46:12
【问题描述】:

我有这个带有行的 myfile:

dog
snake
dog
cat
dog    
snake
python
cat
dog  
cat
dog

这将用狮子代替所有狗 sed -i 's/dog/lion/g'

但我只想在文件中遇到第一个“猫”后进行替换,以便拥有

dog
snake
dog
cat
lion    
snake
python
cat
lion  
cat
lion

我该怎么做? 请注意,我不知道第一个“猫”在哪一行。我必须找到第一只猫,然后从那里申请 sed

【问题讨论】:

    标签: bash unix sed


    【解决方案1】:

    使用range address

    sed '/cat/,$s/dog/lion/' a.txt
    

    本例中的范围从cat 的第一次出现开始,到输入的末尾结束,由/cat/,$ 表示。

    【讨论】:

      【解决方案2】:

      sed解决方案翻译成awk

      $ awk '/cat/,0{sub("dog","lion")}1' file 
      

      解释:

      /cat/,0 从 cat 到文件末尾

      sub("dog","lion")用狮子代替狗

      1打印

      【讨论】:

        【解决方案3】:

        仅当前一行是cat 时,处理用lion 替换dog 的附加选项是:

        sed "/cat/{N;s/dog/lion/;}"
        

        例如,将您的数据文件保存为file.txt

        $ sed "/cat/{N;s/dog/lion/;}" file.txt
        dog
        snake
        dog
        cat
        lion
        snake
        python
        cat
        lion
        cat
        lion
        

        【讨论】:

          猜你喜欢
          • 2013-09-09
          • 2018-08-24
          • 1970-01-01
          • 1970-01-01
          • 2021-12-22
          • 2017-12-12
          • 2017-08-13
          • 2013-11-15
          • 2021-08-07
          相关资源
          最近更新 更多