Simplemente pasaría eso por un segundo grep
para eliminarlos:
grep -r --exclude={\*~,\*.map} "OK" bar/ | grep -vP '(?<!debug)\.js'
El -v
invierte el partido, la impresión de líneas que no coinciden con el patrón y la -P
permite a Perl Compatible Regular Expressions, que dejaron usar lookbehinds negativos . Esta expresión regular particular coincidirá con lo .js
que no está precedido por debug
el medio (ya que estamos invirtiendo las coincidencias) de que solo .js
se 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 OK
y js
dado que grep -v
se aplica a toda la salida, no solo al nombre del archivo. Para evitar eso, solo agregue dos puntos (eso es lo que se grep
usa 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 -T
causas grep
para imprimir una pestaña entre el nombre del archivo y el contenido del archivo. Entonces, si simplemente agregamos un \t
al 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.
OK
y.js
en la misma línea?