You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:02:09