我正在使用lsof -i | grep -E "(LISTEN|ESTABLISHED)"
获得有效联系,我希望得到第一个数字:
实施例
Coda\x202 551 username 46u IPv4 0x8c39e71075d65ab7 0t0 TCP 192.168.0.35:62283->192.168.0.187:6942 (ESTABLISHED)
Coda\x202 551 username 47u IPv4 0x8c39e710759c6c57 0t0 TCP 192.168.0.35:6942->192.168.0.37:59833 (ESTABLISHED)
Coda\x202 551 username 50u IPv4 0x8c39e710759c6c57 0t0 TCP 192.168.0.35:6942->192.168.0.37:59833 (ESTABLISHED)
firefox 981 username 70u IPv4 0x8c39e71070895867 0t0 TCP 192.168.0.35:61753->ec2-52-35-204-251.us-west-2.compute.amazonaws.com:https ESTABLISHED)
Google 16045 username 83u IPv4 0x8c39e71078aba387 0t0 TCP 192.168.0.35:62596->109.239.193.10:https (ESTABLISHED)
Google 16045 username 84u IPv4 0x8c39e71075f52df7 0t0 TCP 192.168.0.35:63819->ham02s15-in-f195.1e100.net:https (ESTABLISHED)
551,981和16045
因此,我可以根据ID对所有连接进行分组,并将它们打印到单独的文件中。
在摆弄正则表达式后,我得到了这个表达式
(\s\d+)\s
符合我想要的数字,但我无法将其添加到我的bash脚本中
我不确定sed,awk或grep等是否更合适。
答案 0 :(得分:1)
如果你想保留你的grep ......
lsof -i | grep -E "(LISTEN|ESTABLISHED)" | awk '{print $2}'
您正在使用awk
至print
第二列($2
)
答案 1 :(得分:0)
您可以将grep
替换为awk
,仅打印第二列:
lsof -i | awk '/(LISTEN|ESTABLISHED)/{print $2}'
这假设第一列和第二列在lsof
的输出中没有任何空格。
答案 2 :(得分:0)
lsof -i | awk '/LISTEN|ESTABLISHED/&&!a[$2]++{print $2}'