0

我正在编写一个脚本来尝试加快我的基本 Wordpress 安装。它下载最新版本,解压缩,更改客户端名称,然后更新配置文件中的一些文本。

但是,我无法使用 sed 插入包含特殊字符的多行。多行来自 WP Secret Key Generator https://api.wordpress.org/secret-key/1.1/salt/,它们将替换标准

define('AUTH_KEY',         'put your unique phrase here');
define('SECURE_AUTH_KEY',  'put your unique phrase here');
define('LOGGED_IN_KEY',    'put your unique phrase here');

ETC...

这是给我问题的代码

# Download data to variable
salt="`curl https://api.wordpress.org/secret-key/1.1/salt/`"

sed -i "/NONCE_SALT/a $salt" $pname/wp-config-sample.php

我正在将生成的文本下载到一个变量中,然后在标准文本中的最后一个实例之后插入一个新行(稍后我将删除所有这些标准行)。它抛出了一个错误;

"ed: -e expression #1, char 112: extra characters after command" 

当我输入一行标准文本时,它很好。如果我在它周围添加引号,$salt它只会在文件中打印文字$salt

sed 是插入此数据的正确方法吗?请记住我需要在文件中的特定点之后插入?

任何提示或提示都非常受欢迎。这是我第一次尝试 bash 脚本。

4

3 回答 3

4

a函数要求在字符串中的任何内部换行符之前都有一个反斜杠。因此,一种方法是使用sed添加必要的反斜杠:

# Download data to variable, adding \ to all but the last line:
salt="$(curl https://api.wordpress.org/secret-key/1.1/salt/ | sed '$ ! s/$/\\/')"

sed -i "/NONCE_SALT/a $salt" "$pname/wp-config-sample.php"

(请注意,我使用$(...)而不是`...`: 后者有痛苦的引用规则。在这种情况下,我不得不写\\\\而不是\\。)

也就是说,在这种情况下,我认为将 salt-stuff 保存到临时文件并使用r而不是a

# Download data to the file salt.txt:
curl https://api.wordpress.org/secret-key/1.1/salt/ > salt.txt

sed -i "/NONCE_SALT/r salt.txt" "$pname/wp-config-sample.php"

rm salt.txt      # could also be done in a trap
于 2012-10-26T01:12:10.177 回答
2

尝试这个:

awk -v salt="$(curl https://api.wordpress.org/secret-key/1.1/salt/)" '
    {print} /NONCE_SALT/{print salt}
' "$pname/wp-config-sample.php" > tmp$$ && mv tmp$$ "$pname/wp-config-sample.php"

与 sed 不同,awk 不受反斜杠或引号或换行符的影响,任何其他可能导致 sed 失败的字符。

于 2012-10-26T04:05:11.717 回答
1

不是wp-config.php通过将 的内容替换为文件来形成$salt文件wp-config-sample.php,或者在适当的位置编辑 wp-config-sample.php,而是更直接地使用egrep -v从 中删除行wp-config-sample.php,然后在末尾连接必要的新行。也就是说,创建一个脚本来执行以下三个步骤,并用适当的代码替换write-customer-stuff

egrep -v 'name_here|word_here|unique phrase here' wp-config-sample.php > wp-config.php
write-customer-stuff >> wp-config.php  
curl https://api.wordpress.org/secret-key/1.1/salt/ >> wp-config.php

您还可以添加如下行用于基本错误检查:

[ $(wc -l < wp-config.php) -eq $(wc -l < wp-config-sample.php) ] || echo '*** Lengths of wp-config.php and wp-config-sample.php are different ***'
于 2012-10-26T04:46:45.353 回答