2009-09-13 45 views
0

我tnsnames.ora文件像解析tnsnames.ora中提取主机名减去域

DB_CONNECTION1= 
    (description= 
    (address= 
     (protocol=tcp) 
     (host=myhost1.mydomain.com) 
     (port=1234) 
    ) 
     (connect_data= 
     (sid=ABCD) 
     (sdu=4321) 
) 
DB_CONNECTION2= 
    (description= 
    (address= 
     (protocol=tcp) 
     (host=myhost2.mydomain.com) 
     (port=1234) 
    ) 
     (connect_data= 
     (sid=ABCD) 
     (sdu=4321) 
) 

做什么的正则表达式我需要使用从关键主机中提取值myhost的。

Ouput should be 
myhost1 
myhost2 

回答

1

由于打印grep的整条生产线,你能做到这一点像步骤:

grep "(host=" tnsnames.ora | cut -f 2 -d '=' | cut -f 1 -d '.' 

进行分解:

  1. 的grep “(主机=” tnsnames.ora中 - - 找到具有条目的所有行“(主机=”
  2. cut -f 2 -d'=' - 如果用'='字符除以第2列中的内容找到
  3. 削减-f 1 -d“” - “”找到什么是列数1,如果你用分隔符

您可以执行的命令链的任何时候,看到中间结果,如:

grep "(host=" tnsnames.ora | cut -f 2 -d '=' 

会给你:

myhost1.mydomain.com) 
myhost2.mydomain.com) 

这样可以很容易地建立自己的指令集做这种类型的事情。

+0

非常感谢miilion你告诉我如何将问题分解成碎片并解决它 – Edwards 2009-09-13 07:18:14