grep regexp [AZ] 返回数字

grep regexp [AZ] 返回数字

我的文件a.txt内容为

1 (C##2)
2 (C##U)

grep在其上使用

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

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

答案1

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

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

相关内容