你刚刚给了一个棘手的(我不知道应该称之为好还是坏^ _ ^)例子。您的文字具有完全相同startpattern
和endpattern
(#
)
我猜你是为sed '/#/,/#/d'
或sed -n '/#/,/#/!p'
寻找同样的方式有一些similiar(不一样的sed的)地址AWK模型。在手册页中有解释。我说的不一样,你的榜样是好的。如果start == end
awk的地址模式是行不通的:
kent$ echo "abd
hfdh
#
fafa
deafa
123
#
end"|awk '/#/,/#/{next}1'
abd
hfdh
fafa
deafa
123
end
因为AWK同一线路匹配(再次检查手册页),但如果它们是不同的,看下面的例子:
kent$ echo "abd
hfdh
#
fafa
deafa
123
##
end"|awk '/#/,/##/{next}1'
abd
hfdh
end
它会给你想要的。所以如果是这样的话,你可以这样做:
awk '/start/,/end/{next}1'
是的,和sed的很相似。
如果开始和结束真的是一样的,你想用awk做,你需要标志。
kent$ echo "abd
hfdh
#
fafa
deafa
123
#
end"|awk '/#/&&!f{f=1;next}f&&/#/{f=0;next}!f'
abd
hfdh
end
那么,在例如更好地使用^#$
,但这不是重点。我希望这回答了你的问题。
+1为您的棘手示例文本! – Kent 2013-04-11 17:32:49