正则表达式匹配精确端口号(netstat命令)

时间:2014-11-14 16:51:13

标签: regex unix

我们有这个正则表达式:\\*.*?(.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

2 个答案:

答案 0 :(得分:2)

你的'。'在600之前匹配任何字符而不只是'。' (为什么你有46000)并且你需要匹配600x之后的空间(为什么你有60006)

\\*.*?([.]600[0-9]) .*?.(LISTEN|ESTABLISHED)

答案 1 :(得分:1)

您可以使用awk仅匹配字段2的端口号模式和最后一个字段的状态:

awk '$NF ~ /(LISTEN|ESTABLISHED)/ && $2 ~ /\.600[0-9]/