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