为了账号安全,请及时绑定邮箱和手机立即绑定

如何在使用awk/sed时多次出现的两个标记模式之间选择行?

如何在使用awk/sed时多次出现的两个标记模式之间选择行?

婷婷同学_ 2019-06-26 16:11:42
如何在使用awk/sed时多次出现的两个标记模式之间选择行?使用awk或sed如何选择在两个不同的标记模式之间发生的行?可能有多个部分标记了这些模式。例如:假设文件包含:abc def1 ghi1 jkl1 mno abc def2 ghi2 jkl2 mno pqr stu开始模式是abc结束模式是mno因此,我需要输出如下:def1 ghi1 jkl1 def2 ghi2 jkl2我使用sed来匹配模式一次:sed -e '1,/abc/d' -e '/mno/,$d' <FILE>有没有办法sed或awk反复这样做直到文件结束?
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

使用awk在必要时使用标志触发打印:

$ awk '/abc/{flag=1;next}/mno/{flag=0}flag' file
def1
ghi1
jkl1
def2
ghi2
jkl2

这是怎么回事?

  • /abc/

    匹配具有此文本的行,以及

    /mno/

    的确如此。
  • /abc/{flag=1;next}

    设置

    flag

    当文本

    abc

    被发现了。然后,它跳过了线。
  • /mno/{flag=0}

    取消设置

    flag

    当文本

    mno

    被发现了。
  • 决赛

    flag

    是具有默认操作的模式,即

    print $0

    *如果

    flag

    等于1这一行是打印出来的。.


查看完整回答
反对 回复 2019-06-26
?
HUX布斯

TA贡献1876条经验 获得超6个赞

使用sed:

sed -n -e '/^abc$/,/^mno$/{ /^abc$/d; /^mno$/d; p; }'

这个-n选项表示默认情况下不打印。

该模式查找包含以下内容的行abc为了.mno,然后执行{ ... }..第一个操作删除abc第二行mno行;以及p打印剩下的线条。您可以根据需要放松reexes。范围以外的任何线abc..mno根本就没有印出来。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 580 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信