我试图从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