转载请注明出处:遇到问题—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 |