Vorrei solo passare un secondo grep
per rimuoverli:
grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'
Il -v
rovescio della corrispondenza, la stampa di linee che non corrispondono al modello e -P
abilita le espressioni regolari compatibili Perl che ci consentono di utilizzare lookbehinds negativi . Questa regex particolare corrisponderà a .js
ciò che non è preceduto da debug
quali mezzi (poiché stiamo invertendo le corrispondenze) che .js
verranno stampati solo quei file.
Tuttavia, come sottolineato da @QuestionOverflow nei commenti, ciò potrebbe avere l'effetto collaterale indesiderato di filtrare le righe che contengono OK
e js
poiché grep -v
viene applicato all'intero output, non solo il nome del file. Per evitarlo, basta aggiungere due punti (questo è ciò che viene grep
utilizzato per separare i nomi dei file dal contenuto del file):
grep -r --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js:'
Ciò non riuscirà comunque se la riga di input contiene foo.js:
o se il nome del file contiene :
. Quindi, per essere sicuri, usa un approccio diverso:
grep -Tr --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js\t'
Le -T
cause grep
per stampare una scheda tra il nome del file e il contenuto del file. Quindi, se aggiungiamo semplicemente \t
a alla fine del regex, corrisponderà solo ai nomi dei file e non al contenuto della riga.
Tuttavia, l' utilizzofind
potrebbe avere più senso a prescindere.
OK
e.js
sulla stessa riga?