Bash AWK中带and运算符的多列上的正则表达式负匹配

Bash AWK中带and运算符的多列上的正则表达式负匹配,bash,awk,gawk,Bash,Awk,Gawk,我有一个带有示例日志的简单文件: 192.168.1.117 60921 224.0.0.252 5355 yahoo.com 192.168.1.117 60900 192.168.1.118 5356 118.1.168.192.in-addr.arpa 192.29.1.221 5943 211.29.132.12 4325 webex.com 192.168.1.221 5943 192.29.132.12 4325 lizzard.com 我使用awk以以下方式过滤内部流量和arpa

我有一个带有示例日志的简单文件:

192.168.1.117 60921 224.0.0.252 5355 yahoo.com
192.168.1.117 60900 192.168.1.118 5356 118.1.168.192.in-addr.arpa
192.29.1.221 5943 211.29.132.12 4325 webex.com
192.168.1.221 5943 192.29.132.12 4325 lizzard.com
我使用awk以以下方式过滤内部流量和arpa域:

awk'($1!~^([192.168]|[192.29])和&$3!~^([192.168]|[192.29])|$$5~(in \-addr\.arpa$)


我不确定我做错了什么,因为我没有得到任何输出?

您缺少在
/
之间包装正则表达式。此外,使用
[]
是错误的

应该是:

awk '($1 !~ /^192\.(168|29)/ && $3 !~ /^192\.(168|29)/) || $5 ~ /in\-addr\.arpa$/' file

您缺少在
/
之间包装正则表达式。此外,使用
[]
是错误的

应该是:

awk '($1 !~ /^192\.(168|29)/ && $3 !~ /^192\.(168|29)/) || $5 ~ /in\-addr\.arpa$/' file

为什么
^([192.168]|[192.29])
而不是
^192\(168 | 192)
?同意对于这个特定的示例它可以工作^192\(168 | 192),但是我可能有不同的IP范围来过滤,例如192.168.0.0、172.16.0.0,因此使用^([192.168]|[172.16])可以给我更好的控制。但这一点对于类似的子网来说是很好的thx@BiscUI我认为您不太了解字符类:为什么
^([192.168]|[192.29])
而不是
^192\(168 | 192)
?同意对于这个特定的示例,它可以工作^192\(168 | 192),但我可能有不同的IP范围进行过滤,例如192.168.0.0、172.16.0.0,因此使用了^([192.168]|[172.16])可以给我更好的控制。但对于类似的子网,这一点很好thx@BiscUI我想你还不太了解角色分类:谢谢完美尝试过的环绕和预期的效果谢谢完美尝试过的环绕和预期的效果