ポート番号を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-ip
4番目のフィールド(現在のポート番号)が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
出力ファイル名を生成しn
、awk
各入力/出力ペアに上記の手順を適用します。ポート番号はファイル内でローカルに再番号付けされます。つまり、各ファイルはポート1000で再起動されます。