如何使用grep/sed/awk从CodeIgniter配置中提取数据库名
提取CodeIgniter数据库配置名的三种实现方案
以下命令均直接针对config/database.php文件处理,直接输出单引号内的数据库名称:
Grep方案(适用于带PCRE支持的GNU Grep环境)
利用正则的\K语法忽略前缀匹配内容,直接提取目标值:grep -oP "\$db\['default'\]\['database'\].*?='\K[^']+" config/database.php参数说明:
-P启用Perl正则语法,-o仅输出匹配到的内容,\K会丢弃之前匹配的前缀内容,[^']+匹配所有非单引号的字符即为数据库名。Sed方案(兼容性最高,几乎所有Unix环境都可用)
用捕获组提取目标内容:sed -n "s/^\s*\$db\['default'\]\['database'\]\s*=\s*'\([^']*\)'.*/\1/p" config/database.php参数说明:
-n关闭默认输出,正则匹配整行后将第一个捕获组([^']*)匹配到的单引号内的内容替换整行,p指令输出替换后的结果,额外加的\s*兼容配置行前后有空格的场景。Awk方案
用单引号作为分隔符直接取对应字段:awk -F "'" '/^\s*\$db\['\''default'\''\]\['\''database'\''\]/{print $6}' config/database.php说明:匹配到目标配置行后,以单引号为分隔符拆分,第6个字段就是单引号包裹的数据库名,兼容行首有空格的场景。
如果你的配置文件存在被注释的同名字段,可以在命令前加过滤逻辑排除注释行,比如先执行grep -vE "^\s*//|^\s*#"过滤注释后再处理即可。
内容的提问来源于stack exchange,提问作者Liso
相关产品推荐
相关产品推荐

