Bash正则表达式:提取WordPress配置文件中引号包裹的数据库信息
适配所有引号格式的WordPress数据库信息提取方案
以下几种命令方案均可处理wp-config.php中DB_NAME定义的单引号、双引号、混合引号场景:
1. GNU grep(Perl正则模式)
这是最简洁的方案,利用Perl正则的捕获和正向预查精准提取:
DBNAME=$(grep -Po "define\(\s*(['\"]?)DB_NAME\1\s*,\s*(['\"])\K.*?(?=\2\s*\);)" wp-config.php)
- 逻辑:
\K忽略前面的匹配内容,(?=\2)正向预查匹配闭合的对应引号,确保提取的是引号内的数据库名。
2. awk(跨平台兼容)
如果你的环境没有GNU grep,awk方案兼容性更好:
DBNAME=$(awk '/define.*DB_NAME/ { for (i=1; i<=NF; i++) { if ($i ~ /^[\x27\x22]/ && $i ~ /[\x27\x22]$/) { gsub(/^[\x27\x22]|[\x27\x22]$/, "", $i) print $i exit } } }' wp-config.php)
- 逻辑:定位到DB_NAME的行后,遍历字段找到首尾带引号的项,去除引号后输出,找到即退出避免冗余匹配。
3. sed正则替换
用sed的分组替换直接提取目标内容:
DBNAME=$(sed -n "s/^define\s*(\s*['\"]DB_NAME['\"]\s*,\s*\(['\"]\)\(.*\)\1\s*);/\2/p" wp-config.php)
- 逻辑:捕获第二个参数的引号类型(
\1),提取引号包裹的数据库名(\2),自动适配单双引号及混合场景。
内容的提问来源于stack exchange,提问作者Peter Griffin
相关产品推荐
相关产品推荐

