打印所有内容使用awk除了匹配范围模式
发布时间:2020-12-14 00:53:00 所属栏目:Linux 来源:网络整理
导读:在Awk中,范围模式不是表达式,因此canot使用“
在Awk中,范围模式不是表达式,因此canot使用“!”不是吗
那么如何实现它(使用awk打印所有内容除了匹配范围模式)? 例如 $cat 1.t abd hfdh # fafa deafa 123 # end 我想要的结果: 猫1.t abd hfdh end 编辑: 我举了一个不好的例子. endpattern应该与startpattern不同,因为我还没有测试过.这是我的错. 同时,我想以不同方式操作范围模式和非范围模式.所以sed不是我的选择. 解决方法
你只是给了一个棘手的(我不知道我应该称之为好或坏^ _ ^)的例子.您的文本具有完全相同的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的相似. 如果开始和结束真的相同,你想用awk做,你需要标志. kent$ echo "abd hfdh # fafa deafa 123 # end"|awk '/#/&&!f{f=1;next}f&&/#/{f=0;next}!f' abd hfdh end 好吧,例如更好地使用^#$,但这不是重点.我希望这回答了你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |