如何用数字 2 替换有效网络地址的最后一个八位字节

tim*_*tim 2 bash sed text-processing

假设我有一个字符串,可以是任何可能/有效的网络地址,如下所示:

STR="192.168.1.0/24"
Run Code Online (Sandbox Code Playgroud)

我想要做的是将最后一个八位字节(在本例中为 0/24,但可以是任何数字)替换为数字 2,但是我不知道最后一个八位字节可以是什么(不会打印新值) ,所以改变:

192.168.1.0/24
Run Code Online (Sandbox Code Playgroud)

到:

192.168.1.2
Run Code Online (Sandbox Code Playgroud)

无论网络地址是什么,我想用“2”替换最后一个八位字节

注意:检查字符串是否是有效的网络地址并不重要,因为所有正在测试的字符串都被假定为有效的网络地址。

Geo*_*iou 6

在终端中这有效:

echo "192.168.1.0/24" | sed  -n 's/0.24/2/p' 
Run Code Online (Sandbox Code Playgroud)

在脚本中这有效:

str="192.168.1.0/24"
newstr=$(sed  -n 's/0.24/2/p' <<<$str)
Run Code Online (Sandbox Code Playgroud)

要替换任何 IP 地址的最后一位数字:

str="192.111.12.20"
newstr=$(awk -F"." '{print $1"."$2"."$3".2"}'<<<$str)
echo $newstr
Run Code Online (Sandbox Code Playgroud)

  • 尝试将“myip = 192.168.0.1”转换为“192.168.0.1/24”。这有帮助!`$(awk -F"." '{print $1"."$2"."$3".1//24"}'&lt;&lt;&lt;$myip)` (2认同)