私はスクリプト能力が少し錆びていて、ファイルを作成し(新しいファイル名を生成する)、ファイルのIPアドレスを+ 1ずつ増やして編集するスクリプトを生成するための良い開始点を見つけようとしています。
私のシナリオは次のとおりです。ネットワークスクリプトに追加する約50個のIPアドレスがあり、それぞれIPが増加します。これは手動で行うこともできますが、今こそスクリプト技術のスピードを上げるための良い機会だと思いました。
命名体系は次のとおりです。
ifcfg-eth0:1, ifcfg-eth0:2, ifcfg-eth0:3 ...*n*
このファイルの内容は次のとおりです。
DEVICE=eth0:1
NETMASK=255.255.255.0
IPADDR=10.2.7.148
BOOTPROTO=none
ONBOOT=yes
DNS1=10.2.53.150
PEERDNS=yes
DNS2=10.2.53.250
GATEWAY=10.2.7.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
各ファイルの場所はIPADDR=10.2.7.148
+1ずつ増やす必要があります。
たとえば、ファイルは等を除いてまったくifcfg-eth0:2
同じです。IPADDR
10.2.7.149
sed
IPアドレスを見つけて交換するには電話が必要です。
たとえば、IPアドレスの検索はsed
次のように実行できます。
sed -rn '/(IPPADDR=)((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])/p' file
eth0:N
ファイルの名前とIPアドレスに+ 1を追加した新しいファイルを作成するには、どのような手順を実行する必要がありますか?
よろしくお願いします!
編集:ファイル名にIPアドレスを含めてはいけないことを明確にします。
上記と同じファイル内容を使用してfile1をfile2 eth0:1
->にコピーする必要がありますが、結果ファイルのフィールドは1ずつ増やす必要があります。eth0:2
IPADDR=
注:ファイル名も+ 1 IE単位で増やす必要があります。cp ifcfg-eth0:1 ifcfg-eth0:2
ベストアンサー1
私が知っている限り、sed
数字を計算する方法はありません。awk
$ awk -F'.' '$1~"IPADDR"{$NF++;OFS="."}1' file
DEVICE=eth0:1
NETMASK=255.255.255.0
IPADDR=10.2.7.149
BOOTPROTO=none
ONBOOT=yes
DNS1=10.2.53.150
PEERDNS=yes
DNS2=10.2.53.250
GATEWAY=10.2.7.1
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
変更するファイルループにこれを含めます。
説明する:
-F'.'
:.
フィールド区切り記号の使用$1~"IPADDR"{}
:最初のフィールドにIPADDR
パターンが含まれている場合は、内部コンテンツを実行します。{}
$NF++;OFS="."
:最後のフィールドの増分番号(NF
レコードのフィールド数を示す)1
:すべてを印刷