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

如何从IP/Block地址中拆分IP与网段并分别存入Bash变量?

拆分IP/网段地址的几种bash实现方法

嘿,我来帮你搞定这个IP和网段拆分的问题!你现在用basename的思路不对哦,它是用来处理文件名路径的,咱们换几种更适合字符串拆分的方法,都能得到你想要的address="100.100.40.160"和block="29"结果:

方法1:用bash内置参数扩展(最推荐,无外部命令)

这种方法不需要调用任何外部工具,纯bash内置功能,执行效率最高:

#!/bin/bash
ipblock="100.100.40.160/29"
# 提取IP:删除从第一个/开始到结尾的所有内容
ipaddress="${ipblock%%/*}"
# 提取网段:删除从开头到最后一个/的所有内容
block="${ipblock##*/}"

echo "address=\"$ipaddress\""
echo "block=\"$block\""

简单解释下语法:

  • ${var%%/*}:%%表示最长匹配删除后缀,这里匹配/*(即从/开始的任意内容),所以会删掉第一个/及后面的所有字符,留下前面的IP
  • ${var##*/}:##表示最长匹配删除前缀,这里匹配*/(即任意内容到/结束),所以会删掉最后一个/及前面的所有字符,留下后面的网段

方法2:用cut命令拆分

如果习惯用文本处理工具,cut是个简单的选择:

#!/bin/bash
ipblock="100.100.40.160/29"
# 按/分割,取第一个字段(IP)
ipaddress=$(echo "$ipblock" | cut -d '/' -f 1)
# 按/分割,取第二个字段(网段)
block=$(echo "$ipblock" | cut -d '/' -f 2)

echo "address=\"$ipaddress\""
echo "block=\"$block\""

cut -d '/' -f 1的意思是:以/作为分隔符,输出第1个字段。

方法3:用awk命令处理

awk在文本处理上更灵活,也能轻松搞定:

#!/bin/bash
ipblock="100.100.40.160/29"
# 按/分割后,把两个字段分别赋值给变量
read ipaddress block <<< $(echo "$ipblock" | awk -F '/' '{print $1, $2}')

echo "address=\"$ipaddress\""
echo "block=\"$block\""

或者更直接一点,用awk直接输出结果:

ipblock="100.100.40.160/29"
awk -F '/' '{printf "address=\"%s\"\nblock=\"%s\"\n", $1, $2}' <<< "$ipblock"

内容的提问来源于stack exchange,提问作者Vituvo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:55:55