在端口 0 中将 0 替换为 1000 并在以下行中增加 +1

Muh*_*yas -2 sed awk text-processing

我想从 1000 开始增加端口号。我知道如何在使用此命令为它们分配编号时使所有端口为 0

sed 's/port [0-9]\{1,5\}/port 0/g'
Run Code Online (Sandbox Code Playgroud)

但不知道如何做相反的事情。我必须在多个脚本文件中的 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
    
    Run Code Online (Sandbox Code Playgroud)
  • 所需的输出如下所示:
    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
    
    Run Code Online (Sandbox Code Playgroud)

Adm*_*Bee 7

你应该能够做到awk

awk 'BEGIN{p=1000} $1=="local-ip"{$4=p++} 1' input.cfg > output.cfg
Run Code Online (Sandbox Code Playgroud)

这将解析所有以local-ip(作为防止空行或注释行的小安全措施)开头的行,并将第 4 个字段(当前端口号)替换为连续增加的数字,从 1000 开始。

更新

由于您在评论中声明要对多个文件执行此操作,因此可以使用以下 shell 循环:

awk 'BEGIN{p=1000} $1=="local-ip"{$4=p++} 1' input.cfg > output.cfg
Run Code Online (Sandbox Code Playgroud)

这将遍历所有匹配的文件input{1..16}.cfg,替换inputwithoutput以生成输出文件名n,并将上述awk程序应用于每个输入/输出对。请注意,端口号将在文件本地重新编号,即每个文件在端口 1000 处重新启动。