解析tnsnames.ora使用grep提取主机名减去域名

时间:2009-09-13 06:41:44

标签: regex parsing grep tnsnames

我有像

这样的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 个答案:

答案 0 :(得分:1)

当grep打印整行时,您可以按照以下步骤执行:

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

要打破它:

  1. grep“(host =”tnsnames.ora - 查找包含条目的所有行“(host =”
  2. cut -f 2 -d'=' - 如果除以'='字符,则查找第2列中的内容
  3. cut -f 1 -d'。' - 如果除以“。”,则查找第1列中的内容。字符

  4. 您可以执行任意点的命令链,以查看中间结果,如:

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

    会给你:

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

    通过这种方式,可以轻松构建一组命令来执行此类操作。