从 IP 地址中分离出最后一个八位字节并将其放入变量中
Posted
技术标签:
【中文标题】从 IP 地址中分离出最后一个八位字节并将其放入变量中【英文标题】:Isolate the last octet from an IP address and put it in a variable 【发布时间】:2014-09-26 22:18:05 【问题描述】:以下脚本:
IP=`ifconfig en0 inet | grep inet | sed 's/.*inet *//; s/ .*//'`
从ipconfig
命令中分离出IP 地址,并将其放入变量$IP
。
我现在如何将最后一个八位字节与所述 IP 地址隔离并将其放入第二个变量 - $CN
例如:
$IP = 129.66.128.72 $CN = 72 或 $IP = 129.66.128.133 $CN = 133...
【问题讨论】:
最好不要使用旧的和过时的反引号,而是使用像这样的括号IP=$(ifconfig.....)
【参考方案1】:
将“cut”命令与 .分隔符:
IP=129.66.128.72
CN=`echo $IP | cut -d . -f 4`
CN 现在包含最后一个八位字节。
【讨论】:
您可以将其缩短为:CN=$(cut -d. -f4 <<<$IP)
<<<
是非标准的,并非所有 shell 都支持。【参考方案2】:
在 BASH 中你可以使用:
ip='129.66.128.72'
cn="$ip##*."
echo $cn
72
或者对非 BASH 使用 sed:
cn=`echo "$ip" | sed 's/^.*\.\([^.]*\)$/\1/'`
echo $cn
72
使用awk
cn=`echo "$ip" | awk -F '\\.' 'print $NF'`
【讨论】:
使用 awk 更短cn=$(awk -F. '$0=$4' <<< $ip)
@Jidder:我相信只有 BASH 支持<<<
,这就是我在非 BASH 解决方案中使用管道的原因。
哦,好吧,不知道它是特定于 bash 的,$()
bash 也是特定的吗?
不,$(...)
符合 POSIX 标准。
啊,这是正确的,感谢您纠正@chepner 我。总是有帮助的。【参考方案3】:
快捷方式:
read IP CN < <(exec ifconfig en0 | awk '/inet / t = $2; sub(/.*[.]/, "", t); print $2, t ')
【讨论】:
<( ... )
是非标准的,并非所有 shell 都支持。【参考方案4】:
我不会使用ifconfig
来获取 IP,而是使用此解决方案,因为无论接口如何,它都会获取访问 Internet 所需的 IP。
IP=$(ip route get 8.8.8.8 | awk 'print $NF;exit')
并获取最后一个八位字节:
last=$(awk -F. 'print $NF' <<< $IP)
或直接获取最后一个八位字节:
last=$(ip route get 8.8.8.8 | awk -F. 'print $NF;exit')
【讨论】:
以上是关于从 IP 地址中分离出最后一个八位字节并将其放入变量中的主要内容,如果未能解决你的问题,请参考以下文章