2009-09-13 40 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