0

我有一个文件的 2 个 tnsentries 条目,每个条目都在一行中。

AAA_PRD = (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=mmmm01.dimpotiso.org)(PORT=1521)))(CONNECT_DATA=(SID=ORCL)))

BBB_PRD = (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=irkosdap01.nonprod.digrestsiso.org)(PORT=1626))(CONNECT_DATA=(SID=BBBDFS)))^

HOST 条目并不总是以相同的列长度开始。我想从主机中删除条目到主机的末尾括号,或者最好只删除主机条目。

我想得到结果

mmmm01.dimpotiso.org

irkosdap01.nonprod.digrestsiso.org

谢谢

我能够通过以下方式从我的 tnsnames.ora 文件中部分获取信息 -

cat  tnsnamesMaster_March12_2013.ora | grep 'HOST' | cut -f2 -d 'HOST=' | cut -f2 -d'=' | cut -f1 -d ')'
4

1 回答 1

1
grep -o 'HOST=[^)]*' tnsnamesMaster_March12_2013.ora | cut -c6-

-o告诉 grep 仅打印匹配的字符串,该字符串HOST=最多但不包括第一个). 然后cutHOST=出来了。

如果您grep支持 perl 正则表达式,您可以通过将其HOST=放在后面来立即执行此操作:

grep -oP '(?<=HOST=)[^)]+' tnsnamesMaster_March12_2013.ora

显然-o不是 POSIX,因此上述方法可能不适用于它们。据我所知,以下是严格符合 POSIX 的,因此应该可以在任何理智的地方工作:

grep HOST tnsnamesMaster_March12_2013.ora | sed 's/.*HOST=\([^)]*\)).*/\1/'

sed -n '/HOST/s/.*HOST=\([^)]*\)).*/\1/p' tnsnamesMaster_March12_2013.ora
于 2013-05-20T17:23:48.977 回答