首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串到bashscript提取精确模式(sed/awk/grep?)

从字符串到bashscript提取精确模式(sed/awk/grep?)
EN

Stack Overflow用户
提问于 2020-08-14 16:38:19
回答 1查看 50关注 0票数 1

欢迎使用堆栈溢出社区。

我目前正在为一件相对简单的事情而努力。为了自动查找和记录应用程序配置,我目前正在开发一个脚本,该脚本从某些应用程序的配置文件中读出配置数据。由于这些配置文件的语法可能不同,并且唯一的常量是例如数据库名称的模式,因此我希望通过regex提取这些数据库名称。

例如:

数据库名称的语法始终为db_s{serverid}_{dbid}

其中serverid由2-4个数字组成,数据库id由2-4个数字组成,向上计数。例如,有效的数据库名称为:

代码语言:javascript
复制
db_s0001_01
db_s1337_42
db_s123_123
db_s42_1337

数据库名称存储在配置文件中,语法各不相同,具体取决于所使用的应用程序。下面是一些示例:

代码语言:javascript
复制
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

分解配置文件以获得正确凭据变量的正确行不是问题。但是,我如何继续从配置字符串中提取准确的数据库名称呢?

正则表达式应该类似于

代码语言:javascript
复制
(db_s[0-9]{2,4}_[0-9]{2,4})

但我不太明白该使用哪种工具,以及如何提取确切的数据库名称。那么,如何才能从其中只获得DB名称呢?

代码语言:javascript
复制
echo 'define( 'DB_NAME', "db_s0001_01" );' | grep/sed/awk (db_s[0-9]{2,4}_[0-9]{2,4})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-14 16:58:53

正如注释中提到的,单引号字符不嵌套。所以你测试的输入是不正确的。修复后,我将使用sed提取数据库名称,如下所示:

代码语言:javascript
复制
echo "define( 'DB_NAME', \"db_s0001_01\" );" | sed 's/.*\(db_s[0-9]\{2,4\}_[0-9]\{2,4\}\).*/\1/g'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63409356

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档