2009-10-02 1 views

risposta

8

Non è chiaro cosa intendi. Se si desidera un personaggio all'inizio e alla doppia cifra alla fine, si potrebbe usare

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

Se si desidera solo un trattino e poi un singolo cifre, uso:

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

Se non importa quante cifre ci sono (uno o più), ma ci deve essere un trattino, uso:

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

Se nessuno di questi sono ciò che si vuole, si prega di fornire ulteriori informazioni ... la prima frase della tua domanda non coincide con il resto.

+0

Hai dimenticato il quantificatore per '[A-Za-z]'. – Gumbo

+0

O meglio, ho dimenticato altre cose dopo di esso - non sappiamo se A00-10 sarebbe accettabile. Risolto però, grazie. –

4

Per esempio

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

è la risposta. Per il caso comune, per favore guarda la risposta di Jon

^ segna l'inizio del modello, $ alla fine. | significa or

9

Se si sta cercando di abbinare parole usare \b come la parola delimitatore, come questo:

\ b [A-Za-z] - \ d + \ b

da this reference:

\b - Corrisponde alla posizione betwee carattere di parola na (niente di pari passo con \w) e un carattere non-parola (niente di pari passo con [^\w] o \W) così come all'inizio e/o alla fine della stringa Se il primo e/o ultimi caratteri della stringa sono caratteri di parole.

+2

Mentre è possibile ottenere il comportamento PCRE in alcune versioni di grep con "grep -P", \ b è bacato e non si comporta in modo affidabile; in particolare, non rileva la tabulazione come un carattere di limite di parola ('\ b/www \ n' spezzato in GNU grep 2.6.3). Se questo avesse funzionato, sarebbe stata la risposta più pulita (e vorrei che funzionasse!)! –

+0

Grazie per questa informazione. –