【发布时间】:2020-04-04 08:48:33
【问题描述】:
假设一个文件包含:
abc
def1
ghi1
mno
abc
def2
ghi2
jkl2
abc
pqr
stu
mno
起始模式是 abc,结束模式是 mno 所以,我需要输出为:
def2
ghi2
jkl2
即,应删除 abc 和 mno 之间的任何内容,并且我希望打印 abc 之后的任何内容,包括 abc,如果它不是以 mno 结尾的则要打印
我尝试了这个sed '/^abc$/,/^mno$/{//!b};d' file,但它删除了所有行,除了以abc 和mno 开头的行之间的行。
【问题讨论】:
-
示例中的第五行是错误的吗?如果是这样,一个简单的
sed '/^abc$/,/^mno$/d' file就可以了。如果不是,请解释为什么abc不在输出中 -
@Sundeep,先生,如果您不介意的话,我可以告诉您我的想法,输出为
def2 ghi2 jkl2,因为就在def2之前,abc的出现是没有关闭,后面又跟着abc,恕我直言,这就是 OP 想要打印它的原因,但 OP 只能确认这一点。 -
Re "abc 和 mno 之间的任何东西都应该被删除",您要求保留的行在
abc和mno之间... -
没有第 5 行不是错误的。我想要 abc 之后的任何东西,包括 abc 如果它不是以 mno 结尾的。
-
@RavinderSingh13,这与我的观点相同。有两个循环,并且包含整个文件。