2011-06-03 138 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 /雙引號。]