首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

遇到问题---sed替换文本中的字符有特殊符号导致缺失数据

遇到问题---sed替换文本中的字符有特殊符号导致缺失数据

在git的ci过程中我们会使用git中设置的变量去设置即将发布的服务中的环境变量值。

使用方式如下:

    - sed -i "s/_GATEWAY_PASSWORD_PROD_/${GATEWAY_PASSWORD_PROD}/" deploy.yml
    - sed -i "s/_CONSUL_TOKEN_PROD_/${CONSUL_TOKEN_PROD}/" deploy.yml
    - kubectl  delete  --ignore-not-found=true -f deploy.yml
    - kubectl  create -f deploy.yml



GATEWAY_PASSWORD_PROD中含有特殊符号时会导致 替换出来的不是我们期望的结果。

这与sed中的正则表达式有关:
正则表达式认可的特殊字符有:

. * [ ] ^ $ { } \ + ? | ( )



这些特殊字符中的一个作为文本字符,需要在特殊字符前添加反斜杠字符\ 来转义它且在sed命令选项中加上g;p进行完全替换。

如下:

#!/bin/bash
oldstr="\[:50\]"
newstr="[50:100]"

cat 1.txt | sed -n "s/$oldstr/$newstr/g;p"



也可以把/替换成#号。
如下:

-i参数:在原始文件上修改

sed全文替换的标准用法:

sed 's/oldString/newString/g' filename



但是有特殊字符时则失效,需要将‘/’替换成‘#’:

sed 's#oldString#newString#g' filename


如:

sed 's#_#\\_#g' ceshi.tex



连续替换多个特殊字符:‘_’, ‘^’

sed -i  's#_#\\_#g ; s#\^#\\^#g' filename



ps:替换特殊字符‘^’时需要进行转义,否则默认在每行行首进行替换相应的内容

注意 在git中号是特殊符号,需要在ci/cd的变量中使用时,需要填写为
号是特殊符号,需要在ci/cd的变量中使用时,需要填写为,获取到时才为,获取到时才为号。
返回列表