grep regexp [AZ] 返回数字

man*_*e00 0 grep

我有a.txt其内容的文件

1 (C##2)
2 (C##U)
Run Code Online (Sandbox Code Playgroud)

并使用grep

cat a.txt | grep '##[A-Z]*'    
1 (C##2)    
2 (C##U)
Run Code Online (Sandbox Code Playgroud)

为什么1 (C##2)这个 grep 结果中会出现数字?我只想出现第二个。所以我指定了[A-Z]. 为什么它被..##2视为比赛?

mur*_*uru 5

[A-Z]*零次或多次出现[A-Z][A-Z]in出现零次##2,因此该行匹配。您可能想要一个或多个(\{1,\}\+与 GNUgrep或兼容的),或启用 ERE+-E选项),或者只是##[A-Z]好像它匹配##[A-Z],它也匹配##[A-Z]+,反之亦然。

另请注意,除了C/POSIX语言环境之外,匹配的内容[A-Z]是未指定的,并且它匹配的字符列表(甚至可能是由多个字符组成的排序规则元素)因语言环境和操作系统而异。在 GNU 系统上,它通常只有拉丁文字的字符(包括?或 之类的东西É)通常只有大写字母,但有时也包括英文 az 字母在内的小写字母(至少在 Ubuntu 18.04 上的泰国泰语语言环境中)。在某些非 GNU 系统(如 Solaris)中,您会得到更多奇特的列表。要仅匹配 ABCDEFGHIJKLMNOPQRSTUVWXYZ,请使用[ABCDEFGHIJKLMNOPQRSTUVWXYZ].