2013-02-28 15 views
27

This answer suggerisce che grep -P supporta la sintassi (?:pattern), ma non sembra funzionare per me (il gruppo è ancora catturato e visualizzato come parte della partita). Mi sto perdendo qualcosa?Come utilizzare i gruppi non di acquisizione in grep?

sto cercando grep -oP "(?:syntaxHighlighterConfig\.)[a-zA-Z]+Color" SyntaxHighlighter.js su this code, e aspetto che i risultati siano:

wikilinkColor 
externalLinkColor 
parameterColor 
... 

ma invece ottengo:

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

si può mostrare qualche input sampel/uscita? –

+1

@sputnick Ho modificato la domanda per aggiungere ulteriori dettagli. – waldyrious

+0

dovresti aver incluso il contenuto del file che stai grepping, prima di mostrare cosa ti aspetti o cosa ottieni – barlop

risposta

44

"non cattura" non significa che l'isn gruppo far parte della partita; significa che il valore del gruppo non viene salvato per l'uso nei riferimenti precedenti. Quello che state cercando è un look-dietro di larghezza zero affermazione:

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

Nota che tutti i lookbehinds sono a larghezza zero – barlop

+5

I lookbehind devono essere corretti. In questo caso aiuta, ma non in altri. – Cromax

+3

Per i riferimenti, '(? <= ...)' è ** asserzione lookbehind positiva **, '(? Rockallite

Problemi correlati