如何使用sed或awk过滤带端口的IP地址提取纯IP?
用sed或awk过滤带端口的IP地址
嘿,刚接触bash脚本的话,这种带端口的IP过滤确实容易懵,不过用sed或者awk都能快速解决!你的需求是把x.x.x.x.port格式的内容转换成纯IPx.x.x.x,下面给你两种实用的方法,附详细解释:
方法一:使用sed命令
sed的核心思路是匹配并删除每个IP末尾的端口部分——也就是最后一个点后面的所有数字。
执行命令:
sed 's/\.[0-9]*$//' your_ip_file.txt
命令解释:
s/old/new/是sed的替换语法,这里我们把old部分替换成空(也就是删除)\.[0-9]*$是匹配规则:\.匹配一个点(因为点在正则里是特殊字符,需要用反斜杠转义)[0-9]*匹配任意数量的数字$表示行尾,确保我们只删除最后一个点后面的端口
比如输入行是192.168.100.1.111,执行后会输出192.168.100.1。
如果你的文件里一行有多个IP(像你给的示例:192.168.100.1.111 192.168.200.10.111),可以用这个修改版命令,处理所有空格分隔的IP:
sed 's/\.[0-9]* / /g; s/\.[0-9]*$//' your_ip_file.txt
这个命令先把每个IP后面的“端口+空格”替换成空格,再处理行尾的端口,最终输出192.168.100.1 192.168.200.10。
方法二:使用awk命令
awk的思路是把IP按点分割,只保留前四个字段,因为你的IP是标准的四个八位组加端口,分割后前四个就是纯IP部分。
执行命令:
awk -F '.' '{print $1"."$2"."$3"."$4}' your_ip_file.txt
命令解释:
-F '.'设置awk的字段分隔符为点,这样每行内容会被分成多个字段print $1"."$2"."$3"."$4打印前四个字段,并用点连接起来,还原成纯IP格式
比如输入行是192.168.200.128.501,执行后会输出192.168.200.128。
如果一行有多个IP,想要把每个处理后的IP单独一行输出,用这个命令:
awk '{for(i=1;i<=NF;i++){split($i,a,"."); print a[1]"."a[2]"."a[3]"."a[4]}}' your_ip_file.txt
如果想保留同一行的空格分隔格式,用这个:
awk '{line=""; for(i=1;i<=NF;i++){split($i,a,"."); line=line a[1]"."a[2]"."a[3]"."a[4]" "} print substr(line,1,length(line)-1)}' your_ip_file.txt
内容的提问来源于stack exchange,提问作者venkyjack
相关产品推荐
相关产品推荐

