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

在Bash脚本中处理路由表获取的路由器IP,如何删除其最后一位?

解决Bash中提取IP网段前缀的问题

嘿,这个需求在网络扫描脚本里太常见了!我给你分享几个简单又可靠的方法,帮你去掉路由器IP的最后一位,生成网段前缀:

方法1:用cut命令(最直观)

cut命令专门用来分割文本,按点分隔IP后取前三个字段就行,代码超简洁:

# 先获取路由器IP
first_ip=$(route -n | awk 'NR>2{print $2}' | head -1)
# 提取网段前缀(比如把192.168.1.1变成192.168.1)
ip_prefix=$(echo "$first_ip" | cut -d '.' -f 1-3)

解释一下:-d '.'指定用点作为分隔符,-f 1-3表示取第1到第3个字段,完美得到我们需要的网段前缀。

方法2:用awk处理(灵活可控)

如果你本来就熟悉awk,也可以直接在提取IP的环节顺便处理,或者单独处理:

# 方式A:单独处理已获取的IP
ip_prefix=$(echo "$first_ip" | awk -F '.' '{print $1"."$2"."$3}')

# 方式B:合并到路由表提取的命令里,一步到位
ip_prefix=$(route -n | awk 'NR>2{split($2, arr, "."); print arr[1]"."arr[2]"."arr[3]}' | head -1)

这里用split函数把IP拆成数组,然后拼接前三个元素,适合需要对IP做更多自定义处理的场景。

方法3:用sed正则替换(正则爱好者首选)

用正则匹配最后一个点及后面的数字,直接替换为空:

ip_prefix=$(echo "$first_ip" | sed 's/\.[0-9]*$//')

正则说明:\.[0-9]*$匹配结尾处的一个点,加上任意数量的数字,替换成空就去掉了最后一段。

最后,生成连续IP的循环示例

拿到前缀后,就可以用循环生成整个网段的IP了:

for ip in $(seq 1 254); do
    echo "$ip_prefix.$ip"
    # 这里可以加你的扫描逻辑,比如ping或者nmap
done

内容的提问来源于stack exchange,提问作者Game Area 88

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:17:59