欢迎使用堆栈溢出社区。
我目前正在为一件相对简单的事情而努力。为了自动查找和记录应用程序配置,我目前正在开发一个脚本,该脚本从某些应用程序的配置文件中读出配置数据。由于这些配置文件的语法可能不同,并且唯一的常量是例如数据库名称的模式,因此我希望通过regex提取这些数据库名称。
例如:
数据库名称的语法始终为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})但我不太明白该使用哪种工具,以及如何提取确切的数据库名称。那么,如何才能从其中只获得DB名称呢?
echo 'define( 'DB_NAME', "db_s0001_01" );' | grep/sed/awk (db_s[0-9]{2,4}_[0-9]{2,4})发布于 2020-08-14 16:58:53
正如注释中提到的,单引号字符不嵌套。所以你测试的输入是不正确的。修复后,我将使用sed提取数据库名称,如下所示:
echo "define( 'DB_NAME', \"db_s0001_01\" );" | sed 's/.*\(db_s[0-9]\{2,4\}_[0-9]\{2,4\}\).*/\1/g'https://stackoverflow.com/questions/63409356
复制相似问题