Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了打印所有内容使用awk除了匹配范围模式大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

在Awk中,范围模式不是表达式,因此canot使用“!”不是吗 那么如何实现它(使用awk打印所有内容除了匹配范围模式)? 例如 $cat 1.t abd hfdh # fafa deafa 123 # end 我想要的结果: 猫1.t abd hfdh end 编辑: 我举了一个不好的例子. endpattern应该与startpattern不同,因为我还没有测试过.这是我的错. 同时,我
在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

好吧,例如更好地使用^#$,但这不是重点.我希望这回答了你的问题.

大佬总结

以上是大佬教程为你收集整理的打印所有内容使用awk除了匹配范围模式全部内容,希望文章能够帮你解决打印所有内容使用awk除了匹配范围模式所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: