我正在尝试进行自动构建。有一个格式为
的属性文件#gpudb.conf
license_key =
我想编写一个包装脚本,我称之为主脚本,将许可证密钥作为命令行选项传递。
installer.sh <<license_key_value>>
我希望installer.sh
替换配置文件
sudo -H -u gpudb bash -c "sed -i 's/\(license_key\s*=\s*\).*/\1$1/' /opt/gpudb/core/etc/gpudb.conf"
$ 1似乎与简单的字符串一起使用。如果我有一个包含大量字符的大型许可证文件,则会出现以下错误。
sed: -e expression #1, char 40: unknown option to `s'
答案 0 :(得分:1)
看起来该键可能包含一个正斜杠,它会破坏sed命令,因为它将它用作分隔符。可能你会发现一个永远不会成为密钥一部分的分隔符并将其用作sed中的分隔符?像这样:
sed 's_SEARCH_REPLACE_' # I'm _ as the delimiter
否则我建议使用awk因为它可以处理固定字符串:
awk -v key="${key}" '/license_key/{print "license_key =", key;next}1' < file > file.tmp
mv file.tmp file