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

如何动态替换文件中http://与:80之间的内容

问题需求

需要动态替换配置文件中http://与:80之间的内容为获取到的IP地址。原有脚本通过固定匹配localhost进行替换,但该位置的内容可能发生变化(比如示例中已出现拼写错误locahost),因此需要改为精准替换这两个字符串之间的任意内容。

需替换的配置行示例:

"UIApiPath": "http://localhost:80/uisvc/v1/api",
"serviceApiPath": "http://localhost:80/servicesvc/v1/api",
"DBApiPath": "http://locahost:80/DBsvc/v1/api"
原有脚本问题

现有脚本通过sed直接替换localhost,但如果该位置不是localhost(比如拼写错误或其他域名/IP),替换就会失效:

#!/bin/bash
DEPLOYMENT_NAME=$1
# 从deployment对象获取pod名称
GETTING_POD_NAME=$(kubectl describe deploy $1 | grep 'NewReplicaSet:' | awk '{print $2}')
# 从pod描述获取IP地址
echo ''
GETTING_IP_ADDRESS=$(kubectl describe pod $GETTING_POD_NAME | sed -n '4p' | awk '{print $2}')
# 提取正确的IP地址(去掉前缀)
SERVER_IP=${GETTING_IP_ADDRESS#*/}
echo $SERVER_IP
# 应用配置文件路径
APP_CONFIGMAP_FILE_PATH=deployment/java-apps/app-configmap.yaml
# 在配置文件中替换IP地址
sed -i "s/localhost/$SERVER_IP/g" $APP_CONFIGMAP_FILE_PATH
修改后的脚本

修改核心是调整sed的正则匹配规则,精准定位http://到:80之间的内容并替换:

#!/bin/bash
DEPLOYMENT_NAME=$1
# 从deployment对象获取pod名称
GETTING_POD_NAME=$(kubectl describe deploy $1 | grep 'NewReplicaSet:' | awk '{print $2}')
# 从pod描述获取IP地址
echo ''
GETTING_IP_ADDRESS=$(kubectl describe pod $GETTING_POD_NAME | sed -n '4p' | awk '{print $2}')
# 提取正确的IP地址(去掉前缀)
SERVER_IP=${GETTING_IP_ADDRESS#*/}
echo $SERVER_IP
# 应用配置文件路径
APP_CONFIGMAP_FILE_PATH=deployment/java-apps/app-configmap.yaml
# 精准替换http://与:80之间的内容为目标IP
sed -i "s|http://[^:]*:80|http://${SERVER_IP}:80|g" $APP_CONFIGMAP_FILE_PATH
修改说明
  • 使用|作为sed替换的分隔符,避免和URL中的/冲突
  • 正则表达式[^:]*匹配任意非冒号的字符,精准覆盖http://到:80之间的所有内容(不管原来是localhost、拼写错误的locahost还是其他值)
  • 全局替换标记g确保所有符合规则的行都被修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:46:04