從文字檔案中過濾名稱

從文字檔案中過濾名稱

我有一個文件,其中第一個字元位置有名字。我正在嘗試找到一種方法來 grep 所有名稱。此處的範例我希望列出名稱 BUBBA 和 SUSAN。

BUBBA =

 (DESCRIPTION =
 (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = bubba01)(PORT = xxxx))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = bubba01)
  )
 )

SUSAN =

 (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = susan01)(PORT = xxxx))
   )
   (CONNECT_DATA =
     (SID = susandb)
   )
  )

答案1

看起來您只想:

grep -o '^[A-Z]\+'

-o表示僅輸出該行的匹配部分,正規表示式匹配行開頭的一個或多個大寫字母的序列。

您也可以使用 執行此類操作sed,對於本例來說過於複雜,但如果您需要進行更複雜的匹配或轉換,則很有用(並且比awk或 更簡單):perl

sed -n '/^[A-Z]\+/{s/^\([A-Z]\+\).*/\1/;p}'

答案2

使用awk

awk 'NF > 1 && $1 !~ /^\(|\)/ {print $1}' file

僅列印至少包含一個欄位 ( NF > 1) 的行,並忽略以():開頭的行^\(|\)

答案3

如果所有輸入檔案的格式相同,那麼對於一個簡單的 awk 解決方案:

awk '/^[a-Z]/ {print $1}' filename

使用 carrat ( ^) 將只選擇每行開頭有一個字元的條目。然後只列印第一個字段,忽略=.

相關內容