两种模式(不包括)与SED之间移除线 [英] removing lines between two patterns (not inclusive) with sed

查看:102
本文介绍了两种模式(不包括)与SED之间移除线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

确定

我知道,这是微不足道的问题,但我怎么可以从两个已知模式/字与字之间的文件中删除行:


  

样式1结果
  垃圾结果
  PATTERN2


获得:


  

样式1结果
  PATTERN2


和没有人已知良好(简单的书面!)的资源,研究sed的?由于许多明显的例子?


解决方案

  SED -n'/样式1 / {磷; :一个; N; !/ PATTERN2 / BA;小号/.* \\ n //}; P'inputfile中

说明:

  /样式1 / {#如果样式1被发现
    p#打印
    :一个循环#
        N#和积累线路
    / PATTERN2 /!BA#,直到PATTERN2被发现
    小号/.* \\ n //#删除之前PATTERN2部分
}
p#打印线(它要么PATTERN2或它的外块)

编辑:

SED 的某些版本必须要填鸭式:

  SED -n -e'/样式1 / {'-e'P'-e':一个'-e'N'-e'!/ PATTERN2 / BA'-e的/.* \\ n //'-e'}'-e'p'inputfile中

Ok

I know that this is trivial question but: How can i remove lines from files that are between two known patterns/words:

pattern1
garbage
pattern2

to obtain:

pattern1
pattern2

And does anyone known good(simple written!) resources for studying sed?? With many clear examples?

解决方案

sed -n '/pattern1/{p; :a; N; /pattern2/!ba; s/.*\n//}; p' inputfile

Explanation:

/pattern1/{         # if pattern1 is found
    p               # print it
    :a              # loop
        N           # and accumulate lines
    /pattern2/!ba   # until pattern2 is found
    s/.*\n//        # delete the part before pattern2
}
p                   # print the line (it's either pattern2 or it's outside the block)

Edit:

Some versions of sed have to be spoon-fed:

sed -n -e '/pattern1/{' -e 'p' -e ':a' -e 'N' -e '/pattern2/!ba' -e 's/.*\n//' -e '}' -e 'p' inputfile

这篇关于两种模式(不包括)与SED之间移除线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆