我已经做了很多挖掘,但还没有找到我的问题的答案。
目前,我有以下命令:
netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}'
返回的内容如下:
192.168.15.73.64759
由此,我只想获取没有端口的 IP。所以,
192.168.15.73
我执行此操作的系统运行嵌入式 Unix 变体 (QNX),并且不支持 -o 作为 grep 的选项。该系统支持 sed 这可能是最好的途径,但我不熟悉该应用程序。
谁能告诉我可以添加什么来获得我正在寻找的输出?
答案1
您可以使用cut
或sed
:
echo 192.168.15.73.64759 | cut -d '.' -f 1-4
echo 192.168.15.73.64759 | sed -E 's,\.[0-9]+$,,'
或者awk
:
echo 192.168.15.73.64759 | awk -F '.' '{print $1"."$2"."$3"."$4}'
答案2
刚刚了解了ss:
ss -n -o state established '( dport = :telnet or sport = :ssh )' |
awk 'NR==2 { print substr($5, 1, index($5, ":")-1) }'
我使用 NR==2 跳过标题并仅抓取输出的第一行,以与您的 netstat/grep 行为相对应。 awk 代码的其余部分打印 $5,但从第一个字符开始,直到找到“:”的索引,减一。
如果系统缺失ss
,那么你可以使用 sed:
echo 192.168.15.73.64759 | sed 's/\.[0-9]*$//'
netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' | sed 's/\.[0-9]*$//'
这会将“句点后跟零个或多个数字,后跟行尾”替换为“无”。
答案3
使用字符串替换:
$ IP=192.168.15.73.64759
$ echo ${IP%.*}
192.168.15.73
IP=$(netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}')
echo ${IP%.*}
答案4
netstat | grep telnet | grep ESTABLISHED | awk 'NR==1{ print $5}' |grep -Po "\b(?:\d{1,3}\.){3}\d{1,3}\b"