遇到问题---sed替换文本中的字符有特殊符号导致缺失数据
- UID
- 1066743
|
遇到问题---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的变量中使用时,需要填写为,获取到时才为,获取到时才为号。 |
|
|
|
|
|