我希望将文件中192.168.XXX的每个实例更改为192.168.yyy。在使用bash脚本的网络配置文件中。让我感到高兴的是,我不确定xxx将会是什么。例如,它可以是192.168.122.1或192.168.123.1。它也可能是192.168.122.2或192.168.122等。我想这可以用一个命令完成。
以下是默认网络文件:
<network>
<name>default</name>
<bridge name="virbr0" />
<forward/>
<ip address="192.168.122.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.122.2" end="192.168.122.254" />
</dhcp>
</ip>
</network>
答案 0 :(得分:0)
以下sed
一个班轮将更改IP 的第3部分(在此示例中为15)并保持其他2或3部分不变。
sed -r 's/192\.168(\.??[0-9]*){2}/192.168.15\1/g'
输出:
192.168.0.12
192.168.15.12
192.168.25.34
192.168.15.34
192.168.0
192.168.15
所以要在192.168.XXX.YYY
运行
192.168.15.YYY
更改为192.168.XXX
或192.168.YYY
更改为network.conf
sed -r 's/192\.168(\.??[0-9]*){2}/192.168.15\1/g' network.conf
这将显示带有更改的stdout
文件,如果您对更改感到满意,请使用-i
选项将更改保存到文件中。
sed -r -i 's/192\.168(\.??[0-9]*){2}/192.168.15\1/g' network.conf
请记住将192.168.15.\1
更改为192.168.XXX.\1
,其中XXX
是您需要的实际数字(不是15)并更改文件名(来自network.conf)。
答案 1 :(得分:0)
sed命令
NEWIP=YYY
sed "s/192\.168\.[0-9]*/192.168.$NEWIP/g" filename
(用一些数字代替YYY)会将192.168.XXX更改为192.168.YYY,这样做也会将表格192.168.XXX.ZZZ更改为192.168.YYY.ZZZ。 g
中的s/.../.../g
表示要更改一行上的所有匹配,而不是仅更改第一行。如图所示,它将在stdout上输出结果。如果要编辑文件,请使用-i开关:
sed -i "s/192\.168\.[0-9]*/192.168.$NEWIP/g" filename
如果您想在使用扩展程序〜备份原始文件后编辑文件,可以说:
sed -i~ "s/192\.168\.[0-9]*/192.168.$NEWIP/g" filename
注意,更改表格192.168.122的条目(即有三个部分而不是四个部分的条目)按要求进行;然而,这样的改变并不一定有意义。如LarsH's answer至Why does pinging 192.168.072 (only 2 dots) return a response from 192.168.0.58?所述,IP点缀格式A.B.C
等同于A.B.0.C
,如果遵循该约定,则更改192.168.122(使用值192.168.0.122)表示192.168.15(值192.168.0.15)。