我試圖從tnsnames.ora文件打印出TNS條目的內容,以確保它在Oracle RAC環境中正確。對tnsnames.ora的正則表達式w/grep
所以,如果我這樣做:
grep -A 4 "mydb.mydomain.com" $ORACLE_HOME/network/admin/tnsnames.ora
我會回來:
mydb.mydomain.com =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)(HOST = myhost.mydomain.com)(PORT = 1521))
(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME=mydb)))
這就是我想要的。現在我有一個環境變量被設置爲通過外部程序的JDBC連接字符串時shell腳本被調用,如:
export [email protected]:1521/mydb
所以我需要得到TNS別名mydb.mydomain.com出上面的字符串的。我不知道如何做多個匹配,並用正則表達式重新排序匹配,需要一些幫助。
grep @.+: $DB_URL
我相信會得到
@myhost.mydomain.com:
,但我在尋找
mydb.mydomain.com
所以我堅持在這一部分。如何獲取TNS別名,然後將其與初始grep進行管道/組合,以顯示TNS條目的文本?
感謝
更新:
@ mklement0 @Walter A - 我想你的方式,但他們不正是我一直在尋找。
echo "@myhost.mydomain.com:1521/mydb" | grep -Po "@\K[^:]*"
echo "@myhost.mydomain.com:1521/mydb" | sed 's/.*@\(.*\):.*/\1/'
echo "@myhost.mydomain.com:1521/mydb" | cut -d"@" -f2 | cut -d":" -f1
echo "@myhost.mydomain.com:1521/mydb" | tr "@:" "\t" | cut -f2
echo "@myhost.mydomain.com:1521/mydb" | awk -F'[@:]' '{ print $2 }'
所有這些方法讓我回到:myhost.mydomain.com
其實就是我在尋找:mydb.mydomain.com
好的,我看到你最近的更新......它似乎按照預期工作。謝謝! – dave111
@ dave111:很高興聽到它。您的問題首先得到了很好的介紹,但是,正如您所看到的,「mydb」和「myhost」之間的相似性導致我和Walter A錯過了這一差異。注意自我:仔細閱讀。對你的建議:或許明確地強調你的問題中人們可能忽視的東西。 – mklement0