从文本文件中过滤名称

从文本文件中过滤名称

我有一个文件,其中第一个字符位置有名字。我正在尝试找到一种方法来 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 ( ^) 将仅选择每行开头有一个字符的条目。然后只打印第一个字段,忽略=.

相关内容