2013-03-27 50 views
0

我有一個變量$salts等於如何使用sed轉義變量?

define('AUTH_KEY', 'sBXb~#HPv(X>|2o2&C K&[email protected]+0.$M,(7-0sW.lpziIZ_EBbHIu3^S}OM-^n,)L S'); define('SECURE_AUTH_KEY', 'RX=tc=pj)y0he{FOqZp/:W{5{@[tnxUv3W_hZ+g4gL)]p!xH-.qb6][email protected]}1'); define('LOGGED_IN_KEY', '0cUHd}{d)g0X~%Qwy8wKc)cxxXFp2/wCcS=/-sH3z84jz47cV#9|%)1-uTtey(s1'); define('NONCE_KEY', 'J|_J>;_xvHA_UQ^5WDpnpq%,vy{WgNBc{K(SSqwFlwhZCCm>Db^cnBy%9X_q[<^E'); define('AUTH_SALT', '?S15/b~oVY&|ZZp]W<B%uF$<C6c%lIe_!nrVmmPWO`[37C45w9Oju!+xrL~zLnlM'); define('SECURE_AUTH_SALT', 'iX-i>DWhT-0[E1H,[Qqmx;w}$N{B,QAF$W^m9]!1!|_y58aYnHAcXL)l~L|}W39W'); define('LOGGED_IN_SALT', 'qN!?,[email protected]]#VLVYY>+=w*M]|=x^!)>wEl%[]R+(jD{VKOSQueiB8eo('); define('NONCE_SALT', '>,[email protected],CIb<vKOR(2[]*x)SBZzy[T]cq%|[}LBFALEPULwEVa*%C;?b$CZIS-#;*'); 

我試圖執行命令

cat -n wp-config.php | sed '45,52d' | sed "45i ${salts}" 

,並得到錯誤

sed: -e expression #1, char 102: extra characters after command 

我怎樣才能逃避sed的$salts變量?

+0

是你的sed ** Gnu **? – Kent 2013-03-27 11:03:41

+0

哦,算了吧,我想你可以使用'R' GNU擴展,但你有標準輸入不已,'貓-n' – Kent 2013-03-27 11:05:46

回答

3

只需用awk讓你不花你的餘生搞清楚你需要逃跑,其中上下文使用SED的字符 - 這是一個無解的問題,該解決方案在AWK微不足道,你不需要貓和多個管道之一:

awk -v salts="$salts" ' 
    NR==45 { $0 = salts } 
    (NR < 46) || (NR > 52) { print NR, $0 } 
' wp-config.php 

的sed是在單行簡單替換一個極好的工具,爲別的只用awk。

+0

感謝這個腳本,實際上我發現用echo $ salts很容易逃脫| sed -e's/[\ /&]/\\&g',無論如何我需要找時間學習awk :) – 2013-03-27 15:41:48

+0

那些不是你需要爲sed轉義的唯一字符。 – 2013-03-27 16:13:31

+0

使用awk的+1。我想了很長一段時間,awk對大多數人來說是一種「死」的語言。不過,我發現它在SO和相關網站上經常出現。非常有用的知道,Arius2038。如果你瞭解它,這一努力可能爲你付出很大的代價。 – 2013-03-27 16:21:41

1

這部作品在$salts

cat -n wp-config.php | sed '45,52d' | sed "45i $(echo $salts | sed -e 's/[\/&]/\\&/g')" 

字符有特殊含義的sed需要先逃脫。

您可以逃脫變量:

echo $VARNAME | sed -e 's/[\/&]/\\&/g' 
+1

這將表現不同在不同的殼/ OSS,並在高度神祕的方式失敗了含有白色變量空格和/或通配符和/或以「 - 」開頭,以及許多其他情況。只是不要這樣做,因爲它絕對是錯誤的方法,即使它似乎對某些特定變量的某些特定值「起作用」。 – 2013-03-27 17:01:32

+1

好的,謝謝,我已經將腳本的一部分更改爲awk。 – 2013-03-27 17:27:57