我必須從此組態檔中獲取我的資料庫憑據:
# Database settings
Aisse.LocalHost=localhost
Aisse.LocalDataBase=mydb
Aisse.LocalPort=5432
Aisse.LocalUser=myuser
Aisse.LocalPasswd=mypwd
# My other app settings
Aisse.NumDir=../../data/Num
Aisse.NumMobil=3000
# Log settings
#Aisse.Trace_AppliTpv=blabla1.tra
#Aisse.Trace_AppliCmp=blabla2.tra
#Aisse.Trace_AppliClt=blabla3.tra
#Aisse.Trace_LocalDataBase=blabla4.tra
特別是,我想mydb從行中獲取價值
Aisse.LocalDataBase=mydb
到目前為止,我已經開發了這個
mydbname=$(echo "$my_conf_file.conf" | grep "LocalDataBase=" | sed "s/LocalDataBase=//g" )
回傳
mydb #Aisse.Trace_blabla4.tra
和
mydbname=$(echo "$my_conf_file.conf" | grep "Aisse.LocalDataBase=" | sed "s/LocalDataBase=//g" )
重新運行 void 字串。
如何僅獲取字串前面的值"Aisse.LocalDataBase="?
uj5u.com熱心網友回復:
使用sed
$ mydbname=$(sed -n 's/Aisse\.LocalDataBase=//p' input_file)
$ echo $mydbname
mydb
uj5u.com熱心網友回復:
您可以使用
mydbname=$(sed -n 's/^Aisse\.LocalDataBase=\(.*\)/\1/p' file)
如果可以有前導空格,您可以在[[:blank:]]*后面添加^:
mydbname=$(sed -n 's/^[[:blank:]]*Aisse\.LocalDataBase=\(.*\)/\1/p' file)
請參閱此在線演示:
#!/bin/bash
s='# Database settings
Aisse.LocalHost=localhost
Aisse.LocalDataBase=mydb
Aisse.LocalPort=5432
Aisse.LocalUser=myuser
Aisse.LocalPasswd=mypwd
# My other app settings
Aisse.NumDir=../../data/Num
Aisse.NumMobil=3000
# Log settings
#Aisse.Trace_AppliTpv=blabla1.tra
#Aisse.Trace_AppliCmp=blabla2.tra
#Aisse.Trace_AppliClt=blabla3.tra
#Aisse.Trace_LocalDataBase=blabla4.tra'
sed -n 's/^Aisse\.LocalDataBase=\(.*\)/\1/p' <<< "$s"
輸出:
mydb
詳情:
-n- 抑制默認行輸出sed^[[:blank:]]*Aisse\.LocalDataBase=\(.*\)- 一個正則運算式,匹配一個字串的開頭 (^),然后是零個或多個空格 ([[:blank:]]*),然后是一個Aisse.LocalDataBase=字串,然后將該行的其余部分捕獲到第 1 組\1- 用第 1 組的值替換整個匹配項p-p沖洗成功替換的結果。
uj5u.com熱心網友回復:
你可以使用這個sed:
mydbname=$(sed -n 's/^[^#][^=]*LocalDataBase=//p' file)
echo "$mydbname"
mydb
正則運算式詳細資訊:
^: 開始[^#]: 匹配除#[^=]*: 匹配 0 個或多個不屬于=LocalDataBase=: 匹配文本LocalDataBase=
uj5u.com熱心網友回復:
恐怕你不完整:
你提到你想要包含“LocalDataBase”的行,但你不想要評論中的行,讓我們從這個開始:
包含“LocalDataBase”的行:
grep "LocalDataBase" conf.conf.txt
包含“LocalDataBase”但不以哈希開頭的行:
grep "LocalDataBase" conf.conf.txt | grep -v "^ *#"
???grep -v "^ *#"
這意味著:不要顯示 ( -v) 行,其中包含:
^: 行的開始*: 可能的空格字串列#: 一個哈希字符
一旦你有了你的行,你需要使用它:
你只需要等號后面的部分,所以讓我們使用那個符號作為分隔符并顯示第二列:
cut -d '=' -f 2
全部一起:
grep "LocalDataBase" conf.conf.txt | grep -v "^ *#" | cut -d '=' -f 2
我們到了嗎?
不,因為可能有人在您的條目后面發表了一些評論,例如:
LocalDataBase=mydb #some information
為了防止這種情況,您還需要洗掉該注釋,您可以通過與以前類似的方式執行此操作:這次您使用哈希字符作為分隔符并顯示第一列:
grep "LocalDataBase" conf.conf.txt | grep -v "^ *#" | cut -d '=' -f 2 | cut -d '#' -f 1
玩得開心。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455970.html
