将最后一个八位字节与IP地址隔离并将其放入变量中

时间:2014-08-04 12:28:40

标签: shell awk sed ip-address

以下脚本:

IP=`ifconfig en0 inet | grep inet | sed 's/.*inet *//; s/ .*//'`

将IP地址与ipconfig命令隔离开来,并将其放入变量$IP中。 我现在如何从上述IP地址中隔离最后一个八位字节并将其放入第二个变量 - $CN

例如:

$ IP = 129.66.128.72 $ CN = 72或$ IP = 129.66.128.133 $ CN = 133 ...

4 个答案:

答案 0 :(得分:11)

使用" cut"命令用。定界符:

IP=129.66.128.72
CN=`echo $IP | cut -d . -f 4`

CN现在包含最后一个八位字节。

答案 1 :(得分:6)

在BASH中你可以使用:

ip='129.66.128.72'
cn="${ip##*.}"
echo $cn
72

或者使用sed作为非BASH:

cn=`echo "$ip" | sed 's/^.*\.\([^.]*\)$/\1/'`
echo $cn
72

使用awk

cn=`echo "$ip" | awk -F '\\.' '{print $NF}'`

答案 2 :(得分:1)

我不会使用ifconfig来获取IP,而是使用此解决方案,因为无论接口如何,它都会获得上网所需的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}')

答案 3 :(得分:0)

快捷方式:

read IP CN < <(exec ifconfig en0 | awk '/inet / { t = $2; sub(/.*[.]/, "", t); print $2, t }')