linux - 如何转义变量以用于 sed?

标签 linux bash shell 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

如何为 sed 转义 $salts 变量?

最佳答案

只需使用 awk,这样您就不必花费余生来弄清楚在哪些上下文中使用 sed 需要转义哪些字符 - 这是一个无法解决的问题,awk 中的解决方案微不足道,您不需要 cat和多个管道:

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

sed 是一个优秀的工具,可以在一行中进行简单的替换,对于其他任何事情只需使用 awk。

关于linux - 如何转义变量以用于 sed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15656280/

相关文章:

java - Apache Commons Email 安装在 Eclipse : cannot be resolved

regex - 反向引用正则表达式在 sed 中不起作用

linux - 如何在Linux中模拟 "out of memory issue"

Bash:评估一个数学术语?

json - 比较 2 个 json 数组并返回差值

linux - 磁盘满后恢复已删除的文件

powershell - 某些命令(例如 IISRESET 和 ROBOCOPY)已在 Powershell v4 中停止工作

bash - 将路径作为参数传递给 shell 脚本

linux - 带有 -C 和 -W 选项的 tcpdump 文件名

linux - 如何更改多个文件的编码?