我正在创建一个在服务器上自动安装openvpn的脚本,这是我需要做的一件事来替换文件中的一行:
sed -i 's/export KEY_CONFIG='$EASY_RSA/whichopensslcnf $EASY_RSA'/export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf/g' /etc/openvpn/easy-rsa/2.0/vars
我知道这里需要进行一些转义,但我不确定哪些键需要转义。你能帮忙吗?
这是vars
文件中的句子:
# This variable should point to
# the openssl.cnf file included
# with easy-rsa.
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
# Edit this variable to point to
我想用以下内容替换未注释的行:
export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf
(原样)
答案 0 :(得分:1)
处理分为两个阶段。首先是shell,然后是sed。
<强>贝壳强>
它取决于哪个引号(你使用的是双重或重复)。在sigle(stron引用)引号之间没有任何东西被解释为除了引号之外的特殊字符。在双引号之间你可以举例如$SHELL_VARIABLE
,它将被扩展为它的值。
<强>桑达强>
你应该在你的正则表达式中使用这些字符\
,以及在整个sed命令中使用的分隔符(在你的情况下是$.*[\]^
)。{/ p>
因此,您的命令应如下所示:
/
您还可以选择sed命令中未出现的其他分隔符。例如sed -i 's/export KEY_CONFIG=`$EASY_RSA\/whichopensslcnf $EASY_RSA`/export KEY_CONFIG=\/etc\/openvpn\/easy-rsa\/2.0\/openssl-1.0.0.cnf/g' /etc/openvpn/easy-rsa/2.0/vars
。
#
答案 1 :(得分:0)
您可以在 sed 中使用不同的分隔符,例如: _
来分隔命令: -
echo "Devavrata/sharma" | sed 's:Devavrath/sharma:shivam:g'