0

我正在尝试查找与以下内容匹配的任何字符串:

AAA-###

其中 A 是任何字母字符,可以有 2 到 5 个。

# 是任何数字,可能有 1 个或多个。

因此,应该找到以下字符串:

ABC-123
DE-4
FGHI-56789

但这不应该被发现:

A15-B432

我尝试了一些不同的东西,比如:

grep [[:alpha:]]\{2,5\}-[[:digit:]]\+

然而,这并没有奏效。

这是redhat上的gnu grep。在我的测试中,在我的 Windows 机器上使用 grep,它也使用了 gnu grep,这很有效。两者似乎都是 2.5.1 版本。

4

2 回答 2

2

您需要-E扩展正则表达式的标志:

$ cat file
ABC-123
DE-4
FGHI-56789
A15-B432
$ grep [[:alpha:]]\{2,5\}-[[:digit:]]\+ file 
$ grep -E [[:alpha:]]\{2,5\}-[[:digit:]]\+ file 
ABC-123
DE-4
FGHI-56789

我个人更喜欢使用''来避免所有\字符:

$ grep -E '[[:alpha:]]{2,5}-[[:digit:]]+' file 
ABC-123
DE-4
FGHI-56789
于 2012-04-05T18:45:04.547 回答
0

你知道哪个部分不工作吗?

[:alpha:]and[:digit:]还是 the\{2,5\}或者只是您没有将正则表达式括在引号中的事实

grep '[[:alpha:]]\{2,5\}-[[:digit:]]\+'?
于 2012-04-05T18:45:03.967 回答