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

Bash中无需新建变量实现参数展开替换?适配sed命令修改IP

解决Bash脚本中IP:Port变量的部分替换问题

可以直接用Bash的参数展开实现需求,无需修改原变量,同时解决sed匹配异常的问题,分两种场景处理:

场景1:端口不含.10.(大多数情况适用)

直接对原变量做局部字符串替换,生成修改后的临时值,再配合转义后的原变量做sed精确替换:

# 原变量
ipp="192.168.10.35:12346"

# 生成修改后的IP:Port(仅替换IP部分的.10.为.130.)
modified_ipp="${ipp/.10./.130.}"

# 转义原变量中的.和:,避免sed将其当作正则特殊字符
escaped_ipp=$(printf '%s' "$ipp" | sed 's/[.:]/\\&/g')

# 执行sed替换(假设要修改的文件是config.txt)
sed -i "s/${escaped_ipp}/${modified_ipp}/g" config.txt

场景2:端口可能包含.10.(更安全的写法)

如果端口存在类似10010这种包含10的情况,可先拆分IP和端口,单独修改IP部分再组合:

ipp="192.168.10.35:10010"

# 拆分IP和端口
ip_part="${ipp%%:*}"    # 提取冒号前的IP部分
port_part="${ipp##*:}"  # 提取冒号后的端口部分

# 修改IP部分的.10.为.130.
modified_ip="${ip_part/.10./.130.}"

# 组合成新的IP:Port
modified_ipp="${modified_ip}:${port_part}"

# 转义原变量做精确匹配
escaped_ipp=$(printf '%s' "$ipp" | sed 's/[.:]/\\&/g')

# 执行sed替换
sed -i "s/${escaped_ipp}/${modified_ipp}/g" config.txt

原sed匹配异常的原因

你之前的sed语句匹配异常,是因为IP中的.在sed正则表达式里是匹配任意单个字符的特殊符号,直接用$ipp作为匹配模式时,会误匹配到类似192x168y10z35:12346的内容。转义原变量里的.和:后,sed才会把它们当作普通字符精确匹配。

示例验证

  • 原文件内容(config.txt):
server_addr = 192.168.10.35:12346
backup_addr = 192.168.10.36:12346
  • 执行脚本后期望结果:
server_addr = 192.168.130.35:12346
backup_addr = 192.168.10.36:12346

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:02:11