【问题标题】:sed – Escape single quotes in variablesed – 转义变量中的单引号
【发布时间】:2020-01-31 17:57:45
【问题描述】:

我有这个命令:

salt=123
sed -i '' "s,\/\* Replace with salts \*\/,$salt,g" ./wp-config.php

如果我在包含该行的文件上运行它会很好:

/* Replace with salts */

但如果我将salt 分配给以下多行,单引号

define('AUTH_KEY',         'oT0.1IG0ajXBDk.uCy?T@d?L.LgK|D3fz={VCq/IdP0fy.ZrI~WuM-9+5:-/DyPj');
define('SECURE_AUTH_KEY',  '0PO8Zgs:g(CFkwFuIKy/[2[Kb|~BO@#+[WrmHZ dE8&u{LcPA.7P$OrH:% 7Bf=G');
define('LOGGED_IN_KEY',    'xPG6BW$d~~[!lL,e<r z~nlo}(~k^b?G`0.m!54rrRggaDbk%a7c(IRzBTx&MUUy');
define('NONCE_KEY',        'J#+Rn;lgjVzjW&X^hj/wi53Y/!B_[UClk1[H:?h6Je|$?dHSb`<n-f**RtNJl;,d');
define('AUTH_SALT',        '>ho*kxR)1M4t)zni|tpDY.wn!>|Z-sVoULi(bY|0NQu/|G-2gAq=A;$3I%|`}kNb');
define('SECURE_AUTH_SALT', '--d5e0/8%^@Yg+3r UFAB`e-hR,;iMr.X]SOn-b~nU+aH[i5_gy]%hE<8V5LqQv1');
define('LOGGED_IN_SALT',   'k;J.$+/3)k0fU]nJ7Dtbh)a!Nr[/2m<uZNO+(:AGu!(B+cVeiXM,]ePdwRn-$~O-');
define('NONCE_SALT',       ':)M$l+-U,QqCFm>8yPa5rIu9nQ<%i4?[.&PY|X&ta-MTpBp#&z+0i?|#~`%P~7,c');

我收到以下错误:

sed: 1: "s,\/\* Replace with sal ...": bad flag in substitute command: '''

有没有一种方法可以完全摆脱 salt 变量的内容,然后进行彻底的替换?

Others recommend using double quotes,但我想我已经这样做了?

【问题讨论】:

  • 哦,所以你的意思是你想把这么多内容放到一个变量salt这里?那么这就意味着我们需要用这些多行来替换一个字符串?
  • @RavinderSingh13 是的,完全正确
  • 问题不是单引号,而是替换字符串中的逗号。
  • 也许我根本不应该使用sed...
  • &amp; 在替换字符串中。

标签: bash sed terminal


【解决方案1】:

将替换字符串写入临时文件,然后使用rsed 命令。

使用 bash 命令重定向,这只是:

sed '/\/\* Replace with salts \*\/{ s/.*//; r'"<(cat <<<"$salt")"$'\n''}' ./wp-config.php

记住 sed 命令用换行符分隔,r 命令后需要换行符(; 不起作用)。

上面的命令匹配正则表达式\/\* Replace with salts \*\,如果匹配,则将当前行替换为空,然后将$salt 变量的输出附加到输出中。因为它是“追加”的,所以您会看到 $salt 输出前面有一个空行。

测试:

salt=$(cat <<'EOF'                                                                                  
define('AUTH_KEY',         'oT0.1IG0ajXBDk.uCy?T@d?L.LgK|D3fz={VCq/IdP0fy.ZrI~WuM-9+5:-/DyPj');
define('SECURE_AUTH_KEY',  '0PO8Zgs:g(CFkwFuIKy/[2[Kb|~BO@#+[WrmHZ dE8&u{LcPA.7P$OrH:% 7Bf=G');
define('LOGGED_IN_KEY',    'xPG6BW$d~~[!lL,e<r z~nlo}(~k^b?G`0.m!54rrRggaDbk%a7c(IRzBTx&MUUy');
define('NONCE_KEY',        'J#+Rn;lgjVzjW&X^hj/wi53Y/!B_[UClk1[H:?h6Je|$?dHSb`<n-f**RtNJl;,d');
define('AUTH_SALT',        '>ho*kxR)1M4t)zni|tpDY.wn!>|Z-sVoULi(bY|0NQu/|G-2gAq=A;$3I%|`}kNb');
define('SECURE_AUTH_SALT', '--d5e0/8%^@Yg+3r UFAB`e-hR,;iMr.X]SOn-b~nU+aH[i5_gy]%hE<8V5LqQv1');
define('LOGGED_IN_SALT',   'k;J.$+/3)k0fU]nJ7Dtbh)a!Nr[/2m<uZNO+(:AGu!(B+cVeiXM,]ePdwRn-$~O-');
define('NONCE_SALT',       ':)M$l+-U,QqCFm>8yPa5rIu9nQ<%i4?[.&PY|X&ta-MTpBp#&z+0i?|#~`%P~7,c');
EOF
)

cat >wp-config.php  <<'EOF'
dfasfsda
/* Replace with salts */
fdasdfsa
EOF

命令会输出:

dfasfsda

define('AUTH_KEY',         'oT0.1IG0ajXBDk.uCy?T@d?L.LgK|D3fz={VCq/IdP0fy.ZrI~WuM-9+5:-/DyPj');
define('SECURE_AUTH_KEY',  '0PO8Zgs:g(CFkwFuIKy/[2[Kb|~BO@#+[WrmHZ dE8&u{LcPA.7P$OrH:% 7Bf=G');
define('LOGGED_IN_KEY',    'xPG6BW$d~~[!lL,e<r z~nlo}(~k^b?G`0.m!54rrRggaDbk%a7c(IRzBTx&MUUy');
define('NONCE_KEY',        'J#+Rn;lgjVzjW&X^hj/wi53Y/!B_[UClk1[H:?h6Je|$?dHSb`<n-f**RtNJl;,d');
define('AUTH_SALT',        '>ho*kxR)1M4t)zni|tpDY.wn!>|Z-sVoULi(bY|0NQu/|G-2gAq=A;$3I%|`}kNb');
define('SECURE_AUTH_SALT', '--d5e0/8%^@Yg+3r UFAB`e-hR,;iMr.X]SOn-b~nU+aH[i5_gy]%hE<8V5LqQv1');
define('LOGGED_IN_SALT',   'k;J.$+/3)k0fU]nJ7Dtbh)a!Nr[/2m<uZNO+(:AGu!(B+cVeiXM,]ePdwRn-$~O-');
define('NONCE_SALT',       ':)M$l+-U,QqCFm>8yPa5rIu9nQ<%i4?[.&PY|X&ta-MTpBp#&z+0i?|#~`%P~7,c');
fdasdfsa

【讨论】:

  • 如果您不想要 empy 行,您可以先执行r,然后执行d,类似于sed -e '\#pattern#{r salts' -e 'd}'(其中salts 只是一个包含替换字符串的文件) .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 2015-11-06
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2017-09-13
  • 2022-01-20
相关资源
最近更新 更多