2011-06-03 89 views
2

我正在努力使sed工作来应用替代操作以下波纹管。PHP的preg_quote等价于Bash?

SALT=$(curl -L https://api.wordpress.org/secret-key/1.1/salt/) 
#SALT='test' #this of course works fine 
#echo $SALT 
sed -i "s/salt_here/$SALT/g" wp-config.php 

在文件“wp-config.php”中有一行字“salt_here”(不含引号)。然而,$ SALT变量有很多垃圾,所以我得到这个错误:

sed: -e expression #1, char 78: unknown option to `s' 

有没有办法逃避一个变量(就像PHP的http://php.net/preg_quote

UPDATE内所有的垃圾:

这是最好的,我可以得到:

SALT=$(curl -L https://api.wordpress.org/secret-key/1.1/salt/ | sed 's/\(\/\|\\\|&\)/\\&/g') 
SALT1=`/usr/bin/php << EOF 
<?php echo preg_quote("$SALT"); ?> 
EOF` 
#echo "$SALT1" 
cp '/home/public_html/zz_f/wp-config.php' '/home/public_html/zz_f/wp-config_t.php' 
sed -i "s/salt_here/$SALT1/g" wp-config.php 

但还是有一个错误:

PHP Parse error: syntax error, unexpected '>', expecting T_VARIABLE or '$' in - on line 3 
sed: -e expression #1, char 12: unterminated `s' command 
+0

这不可能与单引号围绕sed表达式。 Bash不会取代$ SALT的价值。 – 2011-06-03 19:43:01

+3

也许这有助于:http://stackoverflow.com/questions/407523/bash-escape-a-string-for-sed-search-pattern – hakre 2011-06-03 19:46:48

+0

我的错误:它现在在双引号内。 – Roger 2011-06-03 20:04:44

回答

0

使用sed引用它。

SALT=$(curl -L https://api.wordpress.org/secret-key/1.1/salt/ | sed 's/\(\/\|\\\|&\)/\\&/g') 
+0

但是当我尝试运行'sed -i's/salt_here/$ SALT/g'wp-config.php'时,它会回到相同的错误:'sed:-e表达式#1,字符147:未终止的's'命令' – Roger 2011-06-03 20:03:28

+0

嗯,这不是一样的错误。在它过早终止之前,它现在并没有被终止。尝试回应最后一个命令,而不是运行它来查明发生了什么。 – Brilliand 2011-06-03 20:17:04

+0

我已经根据已被接受的答案编辑了我的答案,这个答案是关联的。显然,逃离数字是一个错误,我不知道是否还有其他任何我不应该逃避的东西。 – Brilliand 2011-06-03 20:37:48

0

我正在写一个bash脚本来自动WP将安装& &是卡在这个问题上也是如此。

有一两件事我注意到的是,你可能想试试这个:

sed -i 's/salt_here/'$SALT'/g' wp-config.php

我在传递变量中也可能会有问题,但加上引号变量梦呓以消除问题[注意:不是sed或bash专家,所以不知道这将如何翻译w /双引号。]