Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex tnsnames.ora上的正则表达式_Regex_Oracle_Bash - Fatal编程技术网

Regex tnsnames.ora上的正则表达式

Regex tnsnames.ora上的正则表达式,regex,oracle,bash,Regex,Oracle,Bash,我的tnsnames.ora文件有两种格式: db_cl= (说明= (地址=(协议=TCP)(主机=a55)(端口=1522)) (连接数据)= (服务器=专用) (服务名称=cl) ) ) dbcd= (说明= (地址=(协议=TCP)(主机=a66)(端口=1521)) (连接数据)= (服务器=专用) (服务名称=cd) ) ) myx5= (说明= (地址=(协议=TCP)(主机=v55)(端口=1521)) (连接数据)= (服务器=专用) (服务名称=x5) ) ) 我想获取特定服

我的tnsnames.ora文件有两种格式: db_cl= (说明= (地址=(协议=TCP)(主机=a55)(端口=1522)) (连接数据)= (服务器=专用) (服务名称=cl) ) )

dbcd= (说明= (地址=(协议=TCP)(主机=a66)(端口=1521)) (连接数据)= (服务器=专用) (服务名称=cd) ) )

myx5= (说明= (地址=(协议=TCP)(主机=v55)(端口=1521)) (连接数据)= (服务器=专用) (服务名称=x5) ) )

我想获取特定服务名称或sid的主机名。在某些情况下,它是sid,在某些情况下,它是服务名称。为了获得主机名,我应该用grep搜索什么?在这个例子中,我想得到字符串“host\u name”

****更新**** 我还需要db_名称2,如果有人能提供帮助

@drf:try:

 awk '/HOST/{sub(/).*/,"",$(NF-2));print $(NF-2)}'   Input_file
只需为每一行查找字符串主机,然后替换“.*”从awk与其中字符串主机匹配的行的第二个最后字段中,它应该为您提供主机名称

编辑:要查找特定SID或服务名称,请尝试:

awk '/HOST/{sub(/).*/,"",$(NF-2));HOST=$(NF-2);next} /SID/{print HOST}'
使用要搜索的SID或服务名称更改SID,然后它应该可以工作

编辑2:

awk '/db_name/{sub(/=/,"",$1);DB=$1}/HOST/{sub(/).*/,"",$(NF-2));HOST=$(NF-2);next} /chumma/{print DB ORS HOST}'
编辑3:

awk '{gsub(/\)|\(/,"");;for(i=1;i<=NF;i++){if($i=="HOST"){host=$(i+1)};if($NF=="cd"){val="DB_NAME= "$1", HOST_NAME= "host",SID/SERVICE_NAME= "$NF}};if(val){print val;val=""}}'  Input_file
awk'{gsub(/\)\(/,“”);for(i=1;i@drf:试试:

 awk '/HOST/{sub(/).*/,"",$(NF-2));print $(NF-2)}'   Input_file
只需为每一行查找字符串主机,然后替换“.*”从awk与其中字符串主机匹配的行的第二个最后字段中,它应该为您提供主机名称

编辑:要查找特定SID或服务名称,请尝试:

awk '/HOST/{sub(/).*/,"",$(NF-2));HOST=$(NF-2);next} /SID/{print HOST}'
使用要搜索的SID或服务名称更改SID,然后它应该可以工作

编辑2:

awk '/db_name/{sub(/=/,"",$1);DB=$1}/HOST/{sub(/).*/,"",$(NF-2));HOST=$(NF-2);next} /chumma/{print DB ORS HOST}'
编辑3:

awk '{gsub(/\)|\(/,"");;for(i=1;i<=NF;i++){if($i=="HOST"){host=$(i+1)};if($NF=="cd"){val="DB_NAME= "$1", HOST_NAME= "host",SID/SERVICE_NAME= "$NF}};if(val){print val;val=""}}'  Input_file

awk'{gsub(/\)\(/,“”);for(i=1;i如果有perl可用,请尝试以下命令:

perl -nle 'BEGIN{$service = shift}
    $host = $1 if /HOST\s*=\s*([^\s\)]+)/i;
    print $host if /\((SID|SERVICE_NAME)\s*=\s*$service\)/;
' blabla tnsnames.ora

它存储在
host=…
中找到的最后一个主机值,并在遇到
(**SID/SERVICE\u NAME**=blablabla)

如果可以使用perl,请尝试以下命令:

perl -nle 'BEGIN{$service = shift}
    $host = $1 if /HOST\s*=\s*([^\s\)]+)/i;
    print $host if /\((SID|SERVICE_NAME)\s*=\s*$service\)/;
' blabla tnsnames.ora

它存储在
host=…
中找到的最后一个主机值,并在遇到
(**SID/SERVICE\u NAME**=blabla)时打印它。

我想查找特定SID/SERVICE\u NAME的主机名我想查找特定SID/SERVICE\u NAME的主机名它给了我一个所有主机名的列表,但我想得到一个特定的主机名(我知道sid/服务名称)它成功了,谢谢。另一个与此问题相关的问题,有没有办法获取db_name值?请显示示例输入_文件和预期输出。输入文件在第一条注释中,输出应该是db_name2。例如,我有一个sid,在本例中是blablabla2,我想获得字符串db_name2请立即输入我的edit2,并让我知道这是否有助于您。它为我提供了所有主机名的列表,但我希望获得一个特定的主机名(我知道sid/service_名称)它成功了,谢谢。另一个与此问题相关的问题,有没有办法获取db_name值?请显示示例输入_文件和预期输出。输入文件在第一条注释中,输出应该是db_name2。例如,我有一个sid,在本例中是blablabla2,我想获得字符串db_name2请立即提交我的编辑2,并让我知道这是否有助于你。