我想创建一个 bash 脚本来更改应用程序的配置文件。该脚本将读取一个变量并用该变量值替换我想更改的设置值。
#!/bin/bash
mysqlurlenv1="jdbc:mysl://xx.xx.xx.xx:3306
mysqlurlenv2="jdbc:mysl://xx.xx.xx.xz:3306
configFile=app.conf
pattern=$1
case "$pattern" in
1)
sed -i.bak "s/^\(mysql.db.url =\).*/\1 ${mysqldburl_env1}/"
;;
2)
sed -i.bak "s/^\(mysql.db.url =\).*/\1 ${mysqldburl_env2}/"
;;
*)
echo "Wrong input...try again"
esac
我有一个包含以下条目的配置文件
mysql.db.driver = com.mysql.jdbc.Driver
mysql.db.url = jdbc:mysql....
mysql.db.uname = admin
当我运行脚本时,我收到了这个错误 sed: -e expression #1, char 40: unknown option to `s'
如何在配置文件中获取那些定义的变量?任何帮助将不胜感激
丁丁
您正在使用此 sed 模式s/FIND_STRING/REPLACE_STRING
,这是执行此操作的常用方法。
但是您的REPLACE_STRING
contains /
,因此您的模式将变为s/FIND_STRING/jdbc:mysl://....
无效,因为它包含太多/
.
sed 接受任何字符作为字段分隔符,因此在您的情况下,您需要将 sed 模式字段分隔符从更改/
为其他内容,例如|
.
例子:
$ mysqlurlenv1="jdbc:mysl://xx.xx.xx.xx:3306"
$ echo "mysql.db.url = jdbc:mysql" | sed "s|^\(mysql.db.url =\).*|\1 ${mysqlurlenv1}|"
mysql.db.url = jdbc:mysl://xx.xx.xx.xx:3306
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句