首先,这是家庭作业,不幸的是我必须使用 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"
会发现: 很棒的李连杰
珍·德席尔瓦
但不是: 老麦克唐纳