我在一个变量中设置了一个 IP 地址,我想将其转换为网络地址。
这仅适用于一位数:
echo '192.168.1.2' | sed 's/.$/0/' => 192.168.1.0
echo '192.168.1.22' | sed 's/.$/0/' => 192.168.1.20
echo '192.168.1.223' | sed 's/.$/0/' => 192.168.1.220
Run Code Online (Sandbox Code Playgroud)
如果最后一位数字发生变化,我需要一种方法来返回相同的网络值,即:
myip="192.168.1.2" => "192.168.1.0"
myip="192.168.1.22" => "192.168.1.0"
myip="192.168.1.223" => "192.168.1.0"
Run Code Online (Sandbox Code Playgroud)
如何用上面的网络地址替换任何IP地址?
没有外部命令的纯 bash 解决方案:
echo "${myip%.*}.0"
Run Code Online (Sandbox Code Playgroud)
例如:
$ echo "$myip"
192.168.1.22
$ echo "${myip%.*}.0"
192.168.1.0
Run Code Online (Sandbox Code Playgroud)
使用 sed
echo '192.168.1.2' | sed 's/\.[^.]*$/.0/'
sed 's/\.[^.]*$/.0/' <<< 192.168.1.22 # echo + pipe is not needed here
Run Code Online (Sandbox Code Playgroud)
逻辑:替换从最后.
到最后的所有内容.0
使用 awk
awk -F. '{$NF=0}1' OFS=. <<< 192.168.1.22
awk '{$NF=0}1' FS=. OFS=. <<< 192.168.1.22
Run Code Online (Sandbox Code Playgroud)
逻辑:用 分割字符串.
并将最后一个字段设置为0
。
纯bash
:
{ IFS=. read a b c _; echo $a.$b.$c.0; } <<< 192.168.1.22
( IFS=.; read -a ip; ip[3]=0; echo "${ip[*]}"; ) <<< 192.168.1.22
Run Code Online (Sandbox Code Playgroud)
逻辑:在4个变量中读取IP地址的4个部分。打印第一个 3 和 a 0
。或者通过使用 bash 数组,如果您不想用太多变量弄乱环境。