-1

ファイル内の192.168.XXXのすべてのインスタンスを192.168.yyyに変更しようとしています。bashスクリプトを使用してネットワーク構成ファイルで。私を悩ませているのは、xxxがどうなるかわからないということです。たとえば、192.168.122.1または192.168.123.1のようになります。また、192.168.122.2や192.168.122などの可能性もあります。これは1つのコマンドで実行できると思います。

デフォルトのネットワークファイルは次のとおりです。

    <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

次のsed1つのライナーは、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

したがって、すべてのIP192.168.XXX.YYYを実行中192.168.15.YYYまたは実行 中に変更192.168.XXXするには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

必要な実際の番号(15ではない)に変更し、ファイル名も(network.confから)192.168.15.\1変更することを忘れないでください。192.168.XXX.\1XXX

于 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の一致だけでなく、行のすべての一致を変更するように指示します。示されているように、結果は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のエントリ(つまり、4つではなく3つの部分を持つエントリ)の変更は、問題の要求に従って行われたことに注意してください。ただし、そのような変更は必ずしも意味がありません。LarsHの回答に 記載されているように、なぜ192.168.072(2ドットのみ)にpingを実行すると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 に答える