2016-07-12 10 views
1

Ich mag würde alle Wörter finden, die alle Großbuchstaben, aber wenn ich tungrep für nur Wörter in Großbuchstaben

grep -oP '\w*[A-Z]+\w*' * 

ich

words.py:StringValue 
words.py:WORDS 
words.py:WORDS_ANSWERED 
words.py:Answered 
words.py:True 

, wo ich für

erhofften
words.py:WORDS 
words.py:WORDS_ANSWERED 

Frage

Wie kann ich sicherstellen, dass nur alle Großbuchstaben ausgegeben werden?

Antwort

5

können Sie verwenden diese regex mit Wortgrenze auf beiden Seiten und von [A-Z0-9_] anstelle von \w:

grep -H -oP '\b[A-Z0-9_]*[A-Z]+[A-Z0-9_]*\b' * 

words.py:WORDS 
words.py:WORDS_ANSWERED 
0

Wenn Sie die \w in der Ausgabe nicht möchten, enthalten Sie sie nicht im Muster.

grep -oP '[A-Z]+' * 

Um die erwartete Ausgabe zu erhalten, obwohl, müssen Sie Unterstrichen und Wortgrenzen sind:

grep -oP '\b[A-Z_0-9]+\b' 

Wenn Sie ____ und ähnliches zu vermeiden (? Sind sie häufig in Python-Code), die Verwendung

grep -oP '\b[A-Z_0-9]*[A-Z][A-Z_0-9]*\b' 
+1

Wenn ich das tun , dann wird "True" in der Ausgabe zu "T". –

+0

@JasmineLognnes: Aktualisiert. – choroba

+0

Es passt auch '___', das ohne Großbuchstaben ist. – anubhava

0

Die Regex denkt S, A und T sind Wörter in Großbuchstaben. Das hängt also davon ab, wie Sie Großbuchstaben definieren. Aus Ihren Beispielen scheint es, dass Sie nach etwas mehr wie ^[A-Z_]+$ suchen. Oder, wenn durch „Groß Wort“ meinen Sie „keine Kleinbuchstaben“, [^a-z]+$