[英]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.