如何用特殊字符替换句子?

时间:2014-04-21 13:07:21

标签: bash shell sed

我正在创建一个在服务器上自动安装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(原样)

2 个答案:

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