使用" sed"更新属性文件对于复杂的字符串

时间:2017-11-05 18:34:31

标签: linux sed

我正在尝试进行自动构建。有一个格式为

的属性文件
#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'

1 个答案:

答案 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