问题描述
问候堆栈溢出社区。 p>
我目前正在努力做一个相对简单的事情。 为了自动查找和记录应用程序配置,我目前正在处理一个脚本,该脚本从某些应用程序的配置文件中读取配置数据。 由于这些配置文件的语法可能不同,并且唯一的常量是例如数据库名称的模式,因此我想通过正则表达式提取这些数据库名称。
例如:
数据库名称始终具有语法db_s {serverid} _ {dbid}
其中serverid由2-4个数字组成,而数据库id由2-4个数字组成(向上计数)。 有效的数据库名称例如:
db_s0001_01
db_s1337_42
db_s123_123
db_s42_1337
数据库名称以不同的语法存储在配置文件中,具体取决于所使用的应用程序。 以下是一些示例:
define( 'DB_NAME','db_s0001_01' );
define( 'DB_NAME',"db_s0001_01" );
'dbname' => 'db_s0001_01','dbname' => "db_s0001_01",database_name: db_s0001_01
分解配置文件以获取正确的凭据变量的正确行不是问题。但是我该如何继续从配置字符串中提取精确的数据库名称?
正则表达式应该类似于
(db_s[0-9]{2,4}_[0-9]{2,4})
但是我不太了解要使用哪个工具以及如何提取确切的数据库名称。 那么如何仅从中获取数据库名称呢?
echo 'define( 'DB_NAME',"db_s0001_01" );' | grep/sed/awk (db_s[0-9]{2,4})
解决方法
如注释中所述,单引号字符不嵌套。因此,您要测试的输入不正确。解决此问题后,我将使用sed
来提取数据库名称,如下所示:
echo "define( 'DB_NAME',\"db_s0001_01\" );" | sed 's/.*\(db_s[0-9]\{2,4\}_[0-9]\{2,4\}\).*/\1/g'