我正在尝试从 tnsnames.ora 文件中打印出 TNS 条目的内容,以确保它在 Oracle RAC 环境中是正确的。
因此,如果我执行以下操作:
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)))
这就是我想要的。现在,当调用 shell 脚本时,我有一个外部程序为 JDBC 连接字符串设置的环境变量,如下所示:
export $DB_URL=@myhost.mydomain.com: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