此问题已在此处有答案:
Difference between single and double quotes in Bash(7个回答)
2天前关闭。
我有两个不同的配置文件如下:
# Database
database.url=jdbc:mysql://127.0.0.1/database_name
和
# API
api.port=5005
我想通过在shell脚本中使用sed命令来更改这两个命令。
我做了什么&问题:
这是我为实现它而编写的shell脚本:
DB_CONFIG_FILE=~/configs/database.properties
MYSQL_CONTAINER_PORT=3113
sed -i 's~^database.url=jdbc:mysql://127.0.0.1/database_name.*database.url=jdbc:mysql://127.0.0.1:${MYSQL_CONTAINER_PORT}/database_name~' $DB_CONFIG_FILE
TM_CONFIG_FILE=~/configs/tm.properties
PORT=5100
sed -i 's~^api.port=5005.*api.port=${PORT}~' $TM_CONFIG_FILE
然而,这给了我一个错误,说:
sed: -e expression #1, char : unterminated `s' command
是否有解决方案来包含脚本中声明的这些变量?谢谢你
期望值:
我的期望是将配置文件修改为如下所示:
# Database
database.url=jdbc:mysql://127.0.0.1:3113/database_name
和
# API
api.port=5100
1条答案
按热度按时间ao218c7q1#
几个原因:
1.您的sed命令已中断,因为在
~
之后没有替换.
、*
。?
,+
需要在sed正则表达式中转义。下面的sed应该对你有用:
请注意,我建议使用
.
转义的正则表达式,并使用捕获组和反向引用来避免在模式和替换中重复相同的文本。同样,对于第二个
sed
用途:PS:我已经将你的shell变量从所有大写重命名为 Camel 大小写,以避免与shell env变量冲突。