簡體   English   中英

如何轉義變量以供sed使用?

[英]How can I escape variable for use with sed?

我有一個變量$salts等於

define('AUTH_KEY', 'sBXb~#HPv(X>|2o2&C K&9@l+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]O$VHc5V@}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!?,ORKqNBv@Mf8hb]#VLVYY>+=w*M]|=x^!)>wEl%[]R+(jD{VKOSQueiB8eo('); define('NONCE_SALT', '>,i@yn,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

我如何才能逃脫$salts變量的sed?

只需使用awk,這樣一來,您就不必花費余生來找出需要使用sed在哪些情況下進行轉義的字符-這是一個無法解決的問題,解決方案在awk中是微不足道的,並且您不需要貓和多根管道之一:

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

sed是在單行上進行簡單替換的出色工具,對於其他任何操作,只需使用awk。

這有效

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

$salts中具有sed特殊含義的字符需要首先轉義。

您可以通過以下方式轉義變量:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM