sed 正则表达式用于替换 define('DB_PASSWORD', 'xxxx') 中的 xxx;?

sed 正则表达式用于替换 define('DB_PASSWORD', 'xxxx') 中的 xxx;?

我正在寻找一个正则表达式来快速替换以下 wp-config 文件中的密码,如下所示:

define('DB_PASSWORD', 'xxxx');

现在配置文件有很多定义, 所以基本的仅替换 DB_PASSWORD 参数。我也不知道旧密码,这意味着我无法将“xxxx”替换为“yyyy”。

我在使用 SED 的 Linux 上...(需要替换许多文件),因此类似于:

cat wp-config.php | sed 's/[here the regexp]/new password/'

谢谢!

答案1

如果你不知道旧密码,那就比较棘手了。但你可以尝试以下方法 -

 sed -e "s;\(define([[:space:]]*'DB_PASSWORD',[[:space:]]*\)\(.*\)\()\;\);\1'NewPassHere'\3;g" wp-config.php

这将匹配密码前的文本,然后是密码,然后是密码后的剩余文本。它将保存在 \1、\2、\3 中 - 最后它只替换 \2(即密码)。

一旦您确认它已成功替换密码,您就可以使用“sed -i”来替换密码。在运行此命令之前,请备份 wp-config.php。

答案2

以防万一有人在 Perl 中需要它(现在大多数人都不知道在许多发行版中默认有这样的工具)。一行代码将第二对单引号之间的所有内容替换为新密码。

perl -i -pe" s|^define.'DB_NAME', '(.*?)'.;|define('DB_PASSWORD', 'newpassword');|" wp-config.php

这里“define”后面的点和“;”前面的点分别表示“(”和“)”,以避免像“(”这样的构造,从而使正则表达式更具可读性。另外,为了替换部分的可读性,我没有将密码前后的字符串部分包装到变量中,但这当然是可以做到的。

如果你在脚本中运行单行代码并且需要从 shell 变量中获取新传递:

newpass=$(do_something_here)
perl -i -pe" s|^define.'DB_NAME', '(.*?)'.;|define('DB_PASSWORD', '$newpass');|" wp-config.php

相关内容