簡體   English   中英

通過 bashscript (sed/awk/grep?) 從字符串中提取精確模式

[英]Extact exact pattern from string through bashscript (sed/awk/grep?)

問候 Stack Overflow 社區。

我目前正在努力解決一個相對簡單的事情。 為了自動查找和記錄應用程序配置,我目前正在編寫一個腳本,該腳本從某些應用程序的配置文件中讀取配置數據。 由於這些配置文件的語法可能會有所不同,並且唯一的常量是例如數據庫名稱的模式,因此我想通過正則表達式提取這些數據庫名稱。

例如:

數據庫名稱始終具有語法 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

分解配置文件以獲得正確的憑證變量的正確行不是問題。 但是我將如何打開 go 並從配置字符串中提取精確的數據庫名稱?

正則表達式應該類似於

(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}_[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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM