0

以下に一致する文字列をgrepしようとしています:

AAA-###

ここで、A は任意の英字で、2 ~ 5 個の文字を使用できます。

# は任意の数字で、1 つ以上の数字が存在する可能性があります。

したがって、次の文字列が見つかるはずです。

ABC-123
DE-4
FGHI-56789

しかし、これは見つからないはずです:

A15-B432

次のように、いくつかの異なることを試しました。

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

しかし、それはうまくいきませんでした。

これは redhat の gnu grep です。私のテストでは、gnu grep も使用していた Windows マシンで 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:]、または、\{2,5\}または単に正規表現を引用符で囲んでいないという事実ですか

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