更好的方法来转换IP?

更好的方法来转换IP?

我正在尝试转换10.AB.C9.XYZ10.AB.C2.252.

现在我正在提取每个角色并将它们拼凑在一起。

ip_main=10.AB.C9.XYZ

A_char=${ip_main:3:1}
B_char=${ip_main:4:1}
C_char=${ip_main:6:1}

new_ip="10.${A_char}${B_char}.${C_char}2.252"

有更好的方法来实现这一点吗?

答案1

如果您只想将第三个八位位组的最后一位数字和第四个八位位组的整个数字替换为2.252,那么您可以使用

new_ip=${ip_main%?.*}2.252

$ip_main这会从matches中删除最短的后缀字符串?.*,然后附加2.252到其结果中。使用此模式的替换将始终影响第三个八位位组的最后一位、第三个和第四个八位位组之间的点,然后是整个第四个八位位组。

测试:

$ ip_main=10.AB.C9.XYZ
$ new_ip=${ip_main%?.*}2.252
$ printf '%s\n' "$new_ip"
10.AB.C2.252

答案2

您可以从第三个八位字节中减去 7,然后替换第四个:

echo 10.11.19.44 | awk -F. '{OFS=FS; print $1,$2,$3-7,252}'
10.11.12.252

如果您有要更改的 IP 地址列表,则此过程会最有效。

答案3

sed

sed 's/[^.][.][^.]*$/2.252/'
ip="10.AB.C9.XYZ"
echo "$ip" | sed 's/[^.][.][^.]*$/2.252/'
10.AB.C2.252

相关内容