Ich würde das nur eine Sekunde durchgehen grep, um sie zu entfernen:
grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'
Das -vkehrt die Übereinstimmung um, druckt Linien, die nicht mit dem Muster übereinstimmen, und aktiviert-P Perl-kompatible reguläre Ausdrücke, mit denen wir negative Lookbehinds verwenden können . Diese besondere regex wird übereinstimmen , .jsdas ist nicht von prececeded debugwelche Mittel (da wir die Spiele sind invertiert) , die nur die .jsDateien gedruckt werden.
Wie @QuestionOverflow in den Kommentaren hervorhob, könnte dies jedoch den unbeabsichtigten Nebeneffekt haben, Zeilen herauszufiltern , die enthalten OKund jsda das grep -vauf die gesamte Ausgabe angewendet wird, nicht nur den Dateinamen. Um dies zu vermeiden, fügen Sie einfach einen Doppelpunkt hinzu (dies wird grepverwendet, um Dateinamen vom Dateiinhalt zu trennen):
grep -r --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js:'
Dies schlägt immer noch fehl, wenn Ihre Eingabezeile enthält foo.js:oder wenn Ihr Dateiname enthält :. Verwenden Sie also natürlich einen anderen Ansatz:
grep -Tr --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js\t'
Die -TUrsachen grepfür das Drucken einer Registerkarte zwischen dem Dateinamen und dem Dateiinhalt. Wenn wir also einfach ein \tam Ende der Regex hinzufügen , stimmt es nur mit den Dateinamen überein und nicht mit dem Inhalt der Zeile.
Trotzdem ist die Verwendungfind möglicherweise sinnvoller.
OKund.jsdieselbe Zeile enthalten?