1

異なる IP アドレスを含むテキスト ファイルがあります。IP を含む行 (他にも行があります) を見つけ、最後の桁を 1 増やすスクリプトを作成する必要があります。これを 50 回行う必要があります。

これは、50 個の新しいファイルが保存されることを意味します。ロジックを使用して行番号に移動し、特定の文字を置き換えたくありません。

また、ファイル名はファイル内に存在し、再度 1 増やす必要があります。使用してsedいますが、正しいループとオプションを実現できません。

入力ファイルは example1 です。

 'name example101' 
'ip-address  10.255.255.13'
state enabled 
 'ip-address 10.255.253.45' 
'ip-address 10.255.255.13' 
'ip-address 10.0.0.130'

最初の新しいファイルは example102 です (最後のファイルは example150 になります):

 'name example102' 
'ip-address  10.255.255.14'
state enabled 
 'ip-address 10.255.253.46' 
'ip-address 10.255.255.14' 
'ip-address 10.0.0.131'
4

4 に答える 4

2

IP を増やすには、次の正規表現を使用できます。

perl -lpe 's/((\d{1,3}\.){3})(\d{1,3})/$1 . ($3 + 1)/eg' FILE

「name example101」を増やすには、そのような式を試すことができます。

于 2012-04-17T06:01:34.513 に答える
0

このコマンドライン プログラムは、IP アドレスを除くすべての番号 (ファイル番号を含む) をインクリメントします10.0.0.130。無視するアドレスが 1 つまたは 2 つ以上ある場合、この方法は扱いにくくなり、すべての不変アドレスをファイルまたは__DATA__プログラムのセクションに入れるなどの操作を行う必要があります。

perl -pe "s/(\d+)('\s*)$/($1+1).$2/e unless /\b\Q10.0.0.130\E\b/" ipfile

出力

 'name example102'
'ip-address  10.255.255.14'
state enabled
 'ip-address 10.255.253.46'
'ip-address 10.255.255.14'
'ip-address 10.0.0.130'

編集

変更に 2 番目の除外を追加するには、このコマンドも保護します。0.0.0.0

perl -pe "s/(\d+)('\s*)$/($1+1).$2/e unless /\b\Q10.0.0.130\E|\Q0.0.0.0\E\b/" ipfile
于 2012-04-17T19:00:30.557 に答える
0

これは、Vim でインタラクティブに数秒で実行できます。Vim ではCtrl-A、カーソルの下の数値をインクリメントします。IP アドレスを検索し、最後のオクテットに進み、インクリメントします。register の下にキーボード マクロを記録し、aas を呼び出し、@aを押したまま N 回繰り返し@@ます。

正確なキーストロークは次のとおりです。

録音開始:

qa

次の IPv4 アドレスの開始を検索します。

 /\([0-9]\+\.\)\{3\}[0-9]\+[Enter]

最後のオクテットの前のドットにジャンプ (ドットに 3 回進む):

 3f.

インクリメント:

 Ctrl-A

録音を終了する:

 q

ここで、マクロを再度実行します。

 @a

リピート (@ キーを押し続けると自動リピート):

 @@

u必要なだけ元に戻すために使用すべきではない IP を編集したことに気付いた場合は、それをスキップして、そこから先に進みます。

于 2012-04-17T15:36:01.110 に答える
0

を使用して特定の IP を無視する?!

perl -lpe 's/((ip-address\s+(?!10\.255\.253\.45)((\d{1,3}\.){3}))(\d{1,3}))/$2.($5 + 1)/eg;s/(example)(\d{3})/$1.($2 + 1)/eg;' FILE

(?!10\.255\.253\.45)一部無視するIPを追加

更新:s/(example)(\d{3})/$1.($2 + 1)/eg;入力文字列 example101 をインクリメントして example102 にする部分を追加しました。

于 2012-04-17T14:26:40.727 に答える