Host: 1.1.1.1 () Ports: 8080/open/tcp//http-proxy/// Ignored State: filtered (28)
Host: 2.2.2.2 () Ports: 8888/open/tcp//sun-answerbook/// Ignored State: closed (28)
Host: 3.3.3.3 () Ports: 1263/open/tcp/////, 1499/open/tcp//fhc///, 2301/open/tcp//compaqdiag///, 3124/open/tcp/////, 3127/open/tcp/////, 3128/open/tcp//squid-http///, 3382/open/tcp/////, 4480/open/tcp//proxy-plus///, 4816/open/tcp/////, 6588/open/tcp//analogx///, 7212/open/tcp/////, 8000/open/tcp//http-alt///, 8080/open/tcp//http-proxy/// Ignored State: closed (4)
期望的输出是
1.1.1.1:8080
2.2.2.2:8888
3.3.3.3:1263
3.3.3.3:1499
我知道如果 IP 与端口的比例为 1:1,如何处理,但单个 IP 可以打开多个端口。我刚刚使用每个部分的适当正则表达式来 grep 文件的输出并将其放入数组中,是否有更简单的方法?我在 nix 中的文本操作技能非常初级。
答案1
您似乎错过了所需输出中的一些行...尝试从第五个字段开始运行,检查数字开头,分割/
并打印第一个元素$2
:
awk '{for (i=5; i<=NF; i++) if ($i ~ /^[0-9]/) {split ($i, T, "/"); print $2 ":" T[1]}}' file
1.1.1.1:8080
2.2.2.2:8888
3.3.3.3:1263
3.3.3.3:1499
3.3.3.3:2301
3.3.3.3:3124
3.3.3.3:3127
3.3.3.3:3128
3.3.3.3:3382
3.3.3.3:4480
3.3.3.3:4816
3.3.3.3:6588
3.3.3.3:7212