Simplemente pasaría eso por un segundo greppara eliminarlos:
grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'
El -vinvierte el partido, la impresión de líneas que no coinciden con el patrón y la -Ppermite a Perl Compatible Regular Expressions, que dejaron usar lookbehinds negativos . Esta expresión regular particular coincidirá con lo .jsque no está precedido por debugel medio (ya que estamos invirtiendo las coincidencias) de que solo .jsse imprimirán esos archivos.
Sin embargo, como @QuestionOverflow señaló en los comentarios, eso podría tener el efecto secundario no deseado de filtrar las líneas que contienen OKy jsdado que grep -vse aplica a toda la salida, no solo al nombre del archivo. Para evitar eso, solo agregue dos puntos (eso es lo que se grepusa para separar los nombres de archivo del contenido del archivo):
grep -r --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js:'
Eso seguirá fallando si su línea de entrada contiene foo.js:o si su nombre de archivo contiene :. Entonces, para estar seguro, use un enfoque diferente:
grep -Tr --exclude={*~,*.map} "OK" bar/ | grep -vP '(?<!debug).js\t'
Las -Tcausas greppara imprimir una pestaña entre el nombre del archivo y el contenido del archivo. Entonces, si simplemente agregamos un \tal final de la expresión regular, solo coincidirá con los nombres de los archivos, y no con el contenido de la línea.
Aún así, el usofind podría tener más sentido independientemente.
OKy.jsen la misma línea?