ポート0の0を1000に置き換え、次の行に+1を追加します。

ポート0の0を1000に置き換え、次の行に+1を追加します。

ポート番号を1000から増やしたいです。このコマンドを使用してポートに番号を割り当てるときに、すべてのポートを0に設定する方法を知っています。

sed 's/port [0-9]\{1,5\}/port 0/g'

しかし、逆にする方法がわかりません。複数のスクリプトファイルで2k行を変更する必要があります。

  • これは私が持っているものです。
    local-ip 155.165.170.10 port 0 remote-ip 155.16.241.11 port 3869 
    local-ip 155.165.170.10 port 0 remote-ip 155.16.241.11 port 3869
    local-ip 155.165.170.10 port 0 remote-ip 155.16.241.11 port 3869
    local-ip 155.165.170.10 port 0 remote-ip 155.16.241.11 port 3869
    
  • 希望の出力は次のとおりです。
    local-ip 155.165.170.10 port 1000 remote-ip 155.16.241.11 port 3869
    local-ip 155.165.170.10 port 1001 remote-ip 155.16.241.11 port 3869
    local-ip 155.165.170.10 port 1002 remote-ip 155.16.241.11 port 3869
    local-ip 155.165.170.10 port 1003 remote-ip 155.16.241.11 port 3869
    

ベストアンサー1

次の場所でこれを実行できる必要がありますawk

awk 'BEGIN{p=1000} $1=="local-ip"{$4=p++} 1' input.cfg > output.cfg

これにより、空白行またはコメント行の小さな安全対策で始まるすべての行が解析され、local-ip4番目のフィールド(現在のポート番号)が1000から始まり、連続して増加する数字に置き換えられます。

修正する

コメントに複数のファイルに対してこれを行うことを指定したので、次のシェルループを使用できます。

for f in input{1..16}.cfg; do n=${f/input/output}; awk 'BEGIN{p=1000} $1=="local-ip"{$4=p++} 1' "$f" > "$n"; done

これは、一致するすべてのファイルを繰り返しinput{1..16}.cfg、置換inputしてoutput出力ファイル名を生成しnawk各入力/出力ペアに上記の手順を適用します。ポート番号はファイル内でローカルに再番号付けされます。つまり、各ファイルはポート1000で再起動されます。

おすすめ記事