![输入test.txt](https://linux22.com/image/1200156/%E8%BE%93%E5%85%A5test.txt.png)
这是我在 github 操作中运行的命令,它复制到 .env.production 文件中
sed -i "s#DB_URI=.*$#DB_URI=mongodb+srv://xxxxxx:xxxxxxxx@db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxxxxx.com/webapp_test?tls=true&authSource=admin&replicaSet=db-mongodb-sfo3-api-discovery#"
这是错误/作业构建状态,显示多次复制
DB_URI=***db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxxx.com/webapp_test?tls=trueDB_URI=***db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxx.com/webapp?tls=true&authSource=admin&replicaSet=db-mongodb-sfo3-api-discoveryauthSource=adminDB_URI=***db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxx.com/webapp?tls=true&authSource=admin&replicaSet=db-mongodb-sfo3-api-discoveryreplicaSet=db-mongodb-sfo3-api-discovery
请告诉我如何解决这个问题
答案1
转义几个字符,你的命令将按如下方式运行:
sed -i 's#^DB_URI=.*$#DB_URI=mongodb+srv://xxxxxx:xxxxxxxx@db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxxxxx.com/webapp_test?tls=true\&authSource=admin\&replicaSet=db-mongodb-sfo3-api-discovery#'
输入test.txt
ABC=abc
DB_URI=Hello
LATER=abc
# comment
// comment
输出测试.txt
ABC=abc
DB_URI=mongodb+srv://xxxxxx:xxxxxxxx@db-mongodb-sfo3-api-discovery-f417ebf8.mongo.xxxxxxxxx.com/webapp_test?tls=true&authSource=admin&replicaSet=db-mongodb-sfo3-api-discovery
LATER=abc
# comment
// comment
分析
- 双引号导致 bash 将扩展
$#
为 0 或其他内容。使用单引号停止该扩展。否则 sed 将崩溃,并出现sed: -e expression #1, char 187: unterminated `s' command
- 添加
^
起始锚点以阻止一种重复。编辑:这似乎没有必要,但它更快、更可靠 - 将
&
符号转义为\&
,这样 sed 就不会扩展它们。根据man sed
:
替换可能包含特殊字符 & 来引用匹配的模式空间部分