我们有这个正则表达式:\\*.*?(.600[0-9]).*?.(LISTEN|ESTABLISHED)
OS = Solaris 10
此正则表达式的目的是匹配“netstat -an”输出中的端口,并报告是否使用了6000-6009之间的任何端口。唯一的问题是如果我有这样的东西(如下所述的样本输出),正则表达式匹配其中的所有6000。它匹配46000,60006和6000.因此我们得到错误的警报。我们怎么能解决这个问题才能获得端口(6000-6009)?请帮忙。
10.10.10.10.2055 10.10.4.10.60006 49552 0 49552 0 ESTABLISHED
10.10.10.10.6360 10.10.4.10.6000 65290 0 49640 0 LISTEN
10.10.10.10.2044 10.10.4.10.46000 49552 0 49552 0 ESTABLISHED
答案 0 :(得分:2)
你的'。'在600之前匹配任何字符而不只是'。' (为什么你有46000)并且你需要匹配600x之后的空间(为什么你有60006)
\\*.*?([.]600[0-9]) .*?.(LISTEN|ESTABLISHED)
答案 1 :(得分:1)
您可以使用awk仅匹配字段2的端口号模式和最后一个字段的状态:
awk '$NF ~ /(LISTEN|ESTABLISHED)/ && $2 ~ /\.600[0-9]/