我有一个文件的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 ')'
答案 0 :(得分:1)
grep -o 'HOST=[^)]*' tnsnamesMaster_March12_2013.ora | cut -c6-
-o
告诉grep只打印匹配的字符串,该字符串最多为HOST=
但不包括第一个)
。然后cut
表示HOST=
。
如果您的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