Bash Sed查找和;替换为特殊字符

时间:2012-02-24 20:06:56

标签: bash sed

我正在尝试在{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?

感谢。

4 个答案:

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

实际上,我喜欢这个one better

sed -i 's/{AUTH-KEYS-SALTS}/'"$keysalts"'/g' wp-config.php

个人选择。 : - )

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