使用 egrep 查找包含 5-6 个大写字母的行。(但不超过 6 个)

使用 egrep 查找包含 5-6 个大写字母的行。(但不超过 6 个)

首先,这是家庭作业,不幸的是我必须使用 egrep(而不是使用 -w 或类似的东西)。

我需要我的 grep 返回恰好有 5 个或 6 个大写字母的行。

这样做egrep [A-Z]{5,6} .filename会返回 5 个和 6 个字母的单词,但不幸的是,还会返回比这更多的字母的单词。

因此我在此列表中举例:

ASK
roger ROBERT gulliver
tom THOMAS
JONATHAN moore
MELISSA tenant

我需要它仅返回 ROBERT 和 THOMAS。

答案1

egrep "^[^A-Z]*[A-Z]{5,6}[^A-Z]*$" .filename

答案2

尝试:

egrep '^[A-Z]{5,6}$'

其中^$分别匹配行的开始和结束。

答案3

另一个版本

a) 单词中大写字母最多为 5 个或 6 个;

b) 单词可以有无限的小写字母,加上 '-' 和撇号:'

c) 使用 \b 字边字符(零宽度);

这会找到比您列表更多的内容(这是您想要的),并遵循您声明的所有限制。这可能会超出您的预期,因为它还允许任意数量的小写字母之间大写字母:

"\b[az'-]([AZ][az'-]){5,6}\b"

会发现: 很棒的李连杰

珍·德席尔瓦

但不是: 老麦克唐纳

相关内容