你只是给出了一个棘手的(我不知道我应该称之为好还是坏^_^)的例子。startpattern
您的文字与endpattern
( #
)完全相同
我猜你正在寻找与sed '/#/,/#/d'
或相同的方式sed -n '/#/,/#/!p'
awk 中有一些类似(与 sed 不同)的地址模型。在手册页中有解释。我说不一样,你的例子很好。如果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 的非常相似。
如果 start 和 end 真的相同,你想用 awk 来做,你需要 flag。
kent$ echo "abd
hfdh
#
fafa
deafa
123
#
end"|awk '/#/&&!f{f=1;next}f&&/#/{f=0;next}!f'
abd
hfdh
end
好吧,例如更好地使用^#$
,但这不是重点。我希望这回答了你的问题。