输入test.txt

输入test.txt

这是我在 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

替换可能包含特殊字符 & 来引用匹配的模式空间部分

相关内容