我正在尝试在{AUTH-KEYS-SALTS}
文件中找到wp-config.php
,并将其替换为bash变量keysalts
的内容。
keysalts=`curl -sS https://api.wordpress.org/secret-key/1.1/salt/`
sed -i "s/{AUTH-KEYS-SALTS}/$keysalts/g" wp-config.php
以下几乎可以正常工作,除了keysalts
有一堆特殊字符,比如$`;'“和sed感到困惑。基本上,我如何逃避一切,只需要替换{AUTH-KEYS-SALTS用$ keysalts?
感谢。
答案 0 :(得分:3)
其他方式可能是使用perl
:
perl -i -pe '
BEGIN {
$keysalts = qx(curl -sS https://api.wordpress.org/secret-key/1.1/salt)
}
s/{AUTH-KEYS-SALTS}/$keysalts/g
' wp-config.php
答案 1 :(得分:2)
您可以使用sed本身逃避$keysalts
:
sed -i "s/{AUTH-KEYS-SALTS}/`echo $keysalts | sed -e 's/[\/&]/\\&/g'`/g" wp-config.php
有关详细信息,请参阅this question。
答案 2 :(得分:1)
答案 3 :(得分:0)
事实证明你提出了错误的问题。我也问了一个错误的问题。错误的原因是第一句话的开头:"在我的bash脚本中......"。
我有同样的问题&犯了同样的错误。如果您正在使用bash,则不需要使用sed来进行字符串替换(并且使用bash中内置的替换功能会更加清晰)。
而不是:
keysalts=`curl -sS https://api.wordpress.org/secret-key/1.1/salt/`
sed -i "s/{AUTH-KEYS-SALTS}/$keysalts/g" wp-config.php
您可以专门使用bash功能,将文件读入变量,替换变量中的文本,然后将替换后的文本写回文件:
INPUT=$(<wp-config.php)
keysalts="$(curl -sS https://api.wordpress.org/secret-key/1.1/salt/)"
echo "${INPUT//'{AUTH-KEYS-SALTS}'/"$keysalts"}" >wp-config.php