regex - probar - ack: excluye directorios específicos de búsqueda a través de expresiones regulares
probar expresiones regulares (4)
¿Cómo ignoro directorios específicos a través de RegEx con ack ?
Puedo usar la opción --ignore-dir
, pero esto no me permite especificar un RegEx. Quiero poder ignorar cualquier directorio, que tenga las palabras test
o tests
o patrones más complicados en su nombre.
También probé una mirada negativa detrás de
ack -G ''(?<!test)'' pattern
Pero esto no funciona. No excluye los directorios de test
.
Con ack2, parece que no puedes usar la solución de holygeek.
Así es como lo haría usando -v
y -x
:
ack -v -g ''test'' | ack -x pattern
Más generalmente, ''test''
puede ser una expresión regular para excluir dirs
En el interés de la gente que usa una versión pre-1.96 de ack (como yo), puedes usar expresiones regulares para hacer esto. Aquí hay un ejemplo:
ack --java ''text-pattern'' -G ''^((?!(test|target)).)*$''
Esto buscará el text-pattern
en todos los archivos Java
recursivamente (de.) Que NO tienen las palabras test
o target
en su ruta.
En versiones recientes de ack, puede usar expresiones regulares con --ignore-dir
.
De este hilo :
Sí, en 2.15_01 agregamos:
- ack ahora admite --ignore-dir = match: .... Gracias, Ailin Nemui! (GitHub ticket # 42)
Enlace de GitHub: https://github.com/petdance/ack2/issues/42
Lamentablemente, creo que esto solo admite la coincidencia con el nombre del directorio base, no con la ruta completa.
Por ejemplo, no puede hacer coincidir una ruta como ".*/docs/generated/.*"
.
Para eso, vea el (aún abierto) número 291 de GitHub .
Use la opción no documentada "--invert-file-match" (versión ACK en mi sistema: 1.96):
$ ack pattern -G ''test|tests'' --invert-file-match
Bueno, está algo documentado:
$ ack --help|grep invert
-v, --invert-match Invert match: select non-matching lines
--invert-file-match Print/search handle files that do not match -g/-G.
No está documentado en su perldoc.