猿问

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

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

使用awksed如何选择在两个不同的标记模式之间发生的行?可能有多个部分标记了这些模式。

例如:假设文件包含:

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>

有没有办法sedawk反复这样做直到文件结束?


婷婷同学_
浏览 581回答 3
3回答

三国纷争

使用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这一行是打印出来的。.

HUX布斯

使用sed:sed&nbsp;-n&nbsp;-e&nbsp;'/^abc$/,/^mno$/{&nbsp;/^abc$/d;&nbsp;/^mno$/d;&nbsp;p;&nbsp;}'这个-n选项表示默认情况下不打印。该模式查找包含以下内容的行abc为了.mno,然后执行{ ... }..第一个操作删除abc第二行mno行;以及p打印剩下的线条。您可以根据需要放松reexes。范围以外的任何线abc..mno根本就没有印出来。
随时随地看视频慕课网APP

相关分类

Python
我要回答