You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据前置标记替换文本文件中IP:PORT格式的IP部分

问题需求

在文件中搜索指定标记字符串(如marker-a、marker-b),更新其后IP:PORT格式文本中的IP部分,保留端口(PORT)值不变。

示例场景

标记与目标IP映射

marker-a should use 600.0.0.100
marker-b should use 700.0.0.200

修改前的文件内容

server marker-a 100.0.0.10:11648 check
server marker-b 100.0.0.11:11111 check
server marker-a 100.0.0.10:11648 check
server marker-b 100.0.0.11:11111 check

修改后的文件内容

server marker-a 600.0.0.100:11648 check
server marker-b 700.0.0.200:11111 check
server marker-a 600.0.0.100:11648 check
server marker-b 700.0.0.200:11111 check

已尝试的无效sed命令及问题

sed -e '/^ *marker-a / s/ [^# ]/ 600.0.0.100/' input.txt
  • 问题:匹配规则错误,原文件行以server开头,/^ *marker-a /无法匹配到目标行;替换部分[^# ]仅匹配单个字符,无法覆盖整个IP段。
sed -e 's/^"marker-a" .*$/"marker-a 600.0.0.100"/' input.txt
  • 问题:原文件中没有带双引号的"marker-a",匹配规则完全不匹配目标内容。

可行解决方案

方案1:sed命令(单/多标记处理)

针对每个标记单独写替换规则,利用正则捕获端口部分:

单独处理marker-a:

sed -E '/marker-a/ s/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)/600.0.0.100:\2/' input.txt

单独处理marker-b:

sed -E '/marker-b/ s/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)/700.0.0.200:\2/' input.txt

合并为一条命令同时处理两个标记:

sed -E -e '/marker-a/ s/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)/600.0.0.100:\2/' \
       -e '/marker-b/ s/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)/700.0.0.200:\2/' input.txt
  • 说明:
    • -E启用扩展正则,让捕获组()无需转义
    • /marker-a/过滤出包含该标记的行
    • ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)捕获原IP部分
    • :([0-9]+)捕获端口部分(存为\2)
    • 替换时用新IP加上保留的端口\2

方案2:awk命令(多标记批量处理)

如果有大量标记需要处理,用映射表批量修改更灵活:

awk '
BEGIN {
    ip_map["marker-a"] = "600.0.0.100"
    ip_map["marker-b"] = "700.0.0.200"
}
{
    if ($2 in ip_map) {
        split($3, addr, ":")
        $3 = ip_map[$2] ":" addr[2]
    }
    print $0
}
' input.txt
  • 说明:
    • BEGIN块定义标记到目标IP的映射表
    • 遍历每一行,判断第二个字段(标记)是否在映射表中
    • 分割第三个字段(IP:PORT)为IP和端口,替换IP后重新组合
    • 输出修改后的行

直接修改原文件

若需直接修改原文件(谨慎操作),GNU sed可加-i参数:

sed -i -E -e '/marker-a/ s/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)/600.0.0.100:\2/' \
       -e '/marker-b/ s/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)/700.0.0.200:\2/' input.txt

内容的提问来源于stack exchange,提问作者stealthcoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 06:05:23