-1

我希望将文件中 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>
4

2 回答 2

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

所以要在运行中将所有 IP 从192.168.XXX.YYYto192.168.15.YYY192.168.XXXto更改为192.168.YYYnetwork.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)。

于 2012-10-29T14:59:11.290 回答
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。gin表示要更改一行上的s/.../.../g所有匹配项,而不仅仅是第一个匹配项。如图所示,它将在标准输出上输出结果。如果要就地编辑文件,请使用 -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为什么 ping 192.168.072(只有 2 个点)的回答中所述,会返回来自 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)是没有意义的。

于 2012-10-29T16:11:17.837 回答