2013-02-28 14 views
27

This answer sugeruje, że grep -P obsługuje składnię (?:pattern), ale nie wydaje się to działać dla mnie (grupa jest nadal przechwytywana i wyświetlana jako część dopasowania). Czy czegoś brakuje?Jak używać grup bez przechwytywania w grep?

Staram grep -oP "(?:syntaxHighlighterConfig\.)[a-zA-Z]+Color" SyntaxHighlighter.js na this code i oczekiwać, że wyniki będą:

wikilinkColor 
externalLinkColor 
parameterColor 
... 

ale zamiast uzyskać:

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

można pokazać jakiś sampel wejścia/wyjścia? –

+1

@sputnick Edytowałem pytanie, aby dodać więcej szczegółów. – waldyrious

+0

powinieneś był dołączyć zawartość pliku, który przeglądasz, przed pokazaniem, czego się spodziewasz lub co uzyskasz. – barlop

Odpowiedz

44

"Non-przechwytywanie" nie oznacza, że ​​grupa ISN część meczu; oznacza to, że wartość grupy nie została zapisana do wykorzystania w odsyłaczach. Co szukasz jest look-za zerową szerokość twierdzenie:

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

Pamiętaj, że wszystkie elementy wyglądu mają zerową szerokość. – barlop

+5

Obiekty Lookbehinds muszą mieć stałą długość. W tym przypadku pomaga, ale w innych nie. – Cromax

+3

Dla referencji, '(? <= ...)' jest ** pozytywnym asercją lookbehind **, '(? Rockallite

Powiązane problemy