我有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
视为比赛?
[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]
.