2013-02-28 5 views
27

This answer schlägt vor, dass grep -P die (?:pattern) Syntax unterstützt, aber es scheint nicht für mich zu arbeiten (die Gruppe wird immer noch erfasst und als Teil des Spiels angezeigt). Fehle ich etwas?Wie werden nicht-einfangende Gruppen in Grep verwendet?

Ich versuche grep -oP "(?:syntaxHighlighterConfig\.)[a-zA-Z]+Color" SyntaxHighlighter.js auf this code, und zu erwarten, dass die Ergebnisse sein:

wikilinkColor 
externalLinkColor 
parameterColor 
... 

sondern ich:

syntaxHighlighterConfig.wikilinkColor 
syntaxHighlighterConfig.externalLinkColor 
syntaxHighlighterConfig.parameterColor 
... 
+0

Können Sie einige sampel Eingabe/Ausgabe zeigen? –

+1

@sputnick Ich habe die Frage bearbeitet, um weitere Details hinzuzufügen. – waldyrious

+0

Sie sollten den Inhalt der Datei, die Sie grepping, enthalten, bevor Sie zeigen, was Sie erwarten oder was Sie erhalten – barlop

Antwort

44

"Non-Capturing" bedeutet nicht, dass die Gruppe isn kein Teil des Spiels; Das bedeutet, dass der Wert der Gruppe nicht für die Verwendung in Rückverweisen gespeichert wird. Was Sie suchen ist ein Blick hinter Null-Breite Behauptung:

grep -Po "(?<=syntaxHighlighterConfig\.)[a-zA-Z]+Color" file 
+0

Beachten Sie, dass alle Lookbehinds Null Breite sind – barlop

+5

Lookbehinds müssen feste Länge sein. In diesem Fall hilft es, in anderen nicht. – Cromax

+3

Bei Referenzen ist '(? <= ...)' eine positive Lookbehind-Assertion **, '(? Rockallite

Verwandte Themen