我的文件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]
.