2009-10-02 13 views

Odpowiedz

8

Nie jasne, co masz na myśli. Jeśli chcesz charakter na początku i na dwucyfrowym na końcu, można użyć

^[A-Za-z].*\d\d$ 

Jeśli chcesz tylko myślnik, a następnie pojedynczy cyfra, przeznaczenie:

^[A-Za-z].*-\d$ 

Jeśli nie obchodzi mnie, ile cyfr jest (jeden lub więcej), ale nie musi być myślnik, zastosowanie:

^[A-Za-z].*-\d+$ 

Jeśli żadna z nich to, co chcesz, proszę podać więcej informacji ... pierwsze zdanie twojego pytania nie zgadza się z resztą.

+0

Nie pamiętasz kwantyfikatora dla '[A-Za-z]'. – Gumbo

+0

A raczej, po tym zapomniałem o innych rzeczach - nie wiemy, czy A00-10 byłby do przyjęcia. Naprawiono, dzięki. –

4

Dla przykładu

egrep -v "^(ABC)-(0|1)$" 

jest odpowiedzią. W sprawie typowej, spójrz na odpowiedź Jona

^ oznacza początek wzoru, $ koniec. | oznacza or

9

Jeśli próbujesz dopasować słowa użyć \b jako ogranicznik tekstu, takich jak to:

\ b [a-zA-Z] - \ d + \ b

od this reference:

\b - porównuje się w położeniu MIĘDZY na słowo znaków (cokolwiek dopasowane \w) i charakter non-word (cokolwiek dopasowane [^\w] lub \W) oraz jak na początku i/lub na końcu łańcucha, jeśli pierwszy i/lub ostatni znaków w łańcuchu są znakami słownymi.

+2

Chociaż można uzyskać zachowanie PCRE w niektórych wersjach grep z "grep -P", \ b jest błędne i nie zachowuje się niezawodnie; w szczególności nie wykrywa karty jako znaku ograniczającego słowo ("\ b/www \ n" zepsute w GNU grep 2.6.3). Gdyby to zadziałało, byłoby to najmodniejsze rozwiązanie (i żałuję, że to nie zadziałało!)! –

+0

Dziękuję za te informacje. –

Powiązane problemy