Je voudrais simplement passer cela une seconde greppour les supprimer:
grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'
L' -vinverse la correspondance, l'impression de lignes qui ne correspondent pas au motif et -Ppermet les expressions régulières compatibles Perl qui nous permettent d'utiliser des lookbhinds négatifs . Cette expression régulière particulière correspondra à ce .jsqui n'est pas précédé par debugquel moyen (puisque nous inversons les correspondances) que seuls ces .jsfichiers seront imprimés.
Cependant, comme l'a souligné @QuestionOverflow dans les commentaires, cela pourrait avoir pour effet secondaire inattendu de filtrer les lignes qui contiennent OKet jspuisque le grep -vest appliqué à la sortie entière, pas seulement le nom du fichier. Pour éviter cela, ajoutez simplement deux points (c'est ce qui permet grepde séparer les noms de fichier du contenu du fichier):
grep -r --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js:'
Cela échouera toujours si votre ligne d'entrée contient foo.js:ou si votre nom de fichier contient :. Donc, pour être sûr, utilisez une approche différente:
grep -Tr --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js\t'
Les -Tcauses greppour imprimer un onglet entre le nom de fichier et le contenu du fichier. Donc, si nous ajoutons simplement un \tà la fin de l'expression régulière, il ne correspondra qu'aux noms de fichiers et non au contenu de la ligne.
Néanmoins, l' utilisationfind pourrait avoir plus de sens malgré tout.
OKet.jssur la même ligne?