2009-10-02 28 views

Antwort

8

Es ist nicht beginnt und endet wanto grep -v für ABC-0 und ABC-1 klar, was du meinst. Wenn Sie ein Zeichen an dem Anfang und ein zweistelligen am Ende wollen, könnten Sie

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

verwenden, wenn Sie nur einen Bindestrich wollen und dann eine einzelne Ziffer, zu verwenden:

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

Wenn Sie egal, wie viele Stellen gibt es (ein oder mehr), aber es hat ein Bindestrich, Gebrauch sein:

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

Wenn keiner von denen sind, was Sie wollen, bitte weitere Informationen geben ... Der erste Satz Ihrer Frage stimmt nicht wirklich mit dem Rest überein.

+0

Sie haben den Quantifizierer für '[A-Za-z]' vergessen. – Gumbo

+0

Oder vielmehr, ich habe andere Dinge danach vergessen - wir wissen nicht, ob A00-10 akzeptabel wäre. Trotzdem behoben, danke. –

4

Für Ihr Beispiel

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

ist die Antwort. Für den allgemeinen Fall, bitte sehen Sie Jon Antwort

^ markiert den Beginn des Musters, $ das Ende. | bedeutet or

9

Wenn Sie versuchen, Wörter \b als Worttrennzeichen verwenden entsprechen, wie folgt aus:

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

von this reference:

\b - Entspricht der Position betwee na Wortzeichen (etwas abgestimmt durch \w) und ein Nicht-Wortzeichen (etwas abgestimmt durch [^\w] oder \W) sowie wie zu Beginn und/oder am Ende der Zeichenkette, wenn die ersten und/oder letzte Zeichen in der Zeichenfolge sind Wortzeichen.

+2

Während Sie das PCRE-Verhalten in einigen Versionen von grep mit "grep -P" ermitteln können, ist \ b fehlerhaft und verhält sich nicht zuverlässig. Insbesondere wird die Registerkarte nicht als Wortbegrenzungszeichen erkannt ('\ b/www \ n' in GNU grep 2.6.3). Hätte das funktioniert, wäre das die beste Antwort (und ich wünschte, es würde funktionieren!)! –

+0

Vielen Dank für diese Information. –

Verwandte Themen