¿Cómo me entero de los archivos en el directorio actual, que hacen no contienen la palabrafoo
(usando grep
)?¿Cómo encuentro archivos que no contienen un patrón de cadena dado?
Respuesta
El siguiente comando me da todos los archivos que no contienen el patrón foo
:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep 0
Si su grep tiene la -L
(o --files-without-match
) opción:
$ grep -L "foo" *
o su equivalente usando [ack] (http://betterthangrep.com/): 'ack -L 'foo'' – asymmetric
Como se señaló en otra parte, ack ayuda a evitar los archivos .svn (subversión) por defecto. – GuruM
@GuruM Esto se puede hacer en GNU grep exportando la variable 'GREP_OPTIONS = '- exclude-dir = .svn --exclude-dir = .git'': ^) – bufh
tuve la buena suerte con
grep -H -E -o -c "foo" */*/*.ext | grep ext:0
Mis intentos con grep -v
me acaba de dar todas las líneas sin "foo".
Que se va a necesitar:
find . -not -ipath '.*svn*' -exec grep -H -E -o -c "foo" {} \; | grep :0\$
Tome un vistazo a ack
. Hace la exclusión automática .svn
, le da expresiones regulares de Perl y es una simple descarga de un solo programa Perl.
El equivalente a lo que estás buscando debe ser, en ack
:
ack -L foo
no, eso devuelve todas las líneas que no coinciden con 'foo'. lo que está buscando es 'ack -L foo' – asymmetric
El siguiente comando excluye la necesidad de que el hallazgo para filtrar los svn
carpetas mediante el uso de una segunda grep
.
grep -rL "foo" ./* | grep -v "\.svn"
El siguiente comando podría ayudarlo a filtrar las líneas que incluyen la subcadena "foo".
cat file | grep -v "foo"
Esto imprime las líneas que no coinciden, no los nombres de los archivos que no contienen una coincidencia en ninguna línea. Para colmo de males, es un [uso inútil de 'cat'] (http://www.iki.fi/era/unix/award.html). – tripleee
grep -irnw "filepath" -ve "pattern"
o
grep -ve "pattern" < file
comando anterior nos dará el resultado como -v encuentra el inverso del patrón que se busca
Esto imprime las líneas que no contienen el patrón. Puede agregar la opción '-l' para imprimir solo el nombre del archivo; pero esto todavía imprime los nombres de cualquier archivo que contenga * cualquier * línea que no contenga el patrón. Creo que OP quiere encontrar los archivos que no contienen ninguna línea que contenga el patrón. – tripleee
Mi grep no tiene ninguna opción -L. Encuentro una solución para lograr esto.
Las ideas son:
- para volcar todo el nombre del archivo que contiene la cadena merecía un txt1.txt.
- volcar todo el nombre de archivo en el directorio a un txt2.txt.
hacen la diferencia entre el archivo de 2 volcados con el comando diff.
grep 'foo' *.log | cut -c1-14 | uniq > txt1.txt grep * *.log | cut -c1-14 | uniq > txt2.txt diff txt1.txt txt2.txt | grep ">"
Olvidé los comandos, pero en lugar de eliminar los nombres de los archivos, puedes hacer un 'diff' entre dos flujos de salida (creo que rodeas los comandos con paréntesis, y hay un paréntesis en algún lugar), si tus sistemas lo admiten , que supongo que es la pregunta, ya que no es compatible con 'grep -L' –
find *20161109* -mtime -2|grep -vwE "(TRIGGER)"
Puede especificar el filtro en "encontrar" y la cadena de exclusión bajo "grep -vwE".Use mtime en find si necesita filtrar en tiempo modificado también.
Esto parece mostrarme todas las líneas sin la cadena, el OP solo solicita los nombres de los archivos. –
- 1. Eliminar archivos que no contienen una cadena específica
- 2. cómo encontrar archivos que contienen una cadena usando egrep
- 3. ¿Cómo usar grep para encontrar todos los archivos que contienen un patrón pero no tienen un segundo?
- 4. cadena de detección que sólo contienen espacios
- 5. incluir sólo los archivos que coinciden con un patrón dado en un diff recursivo
- 6. Dado un conjunto de puntos, ¿cómo encuentro los dos puntos que están más alejados entre sí?
- 7. Linux: eliminando archivos que no contienen todas las palabras especificadas
- 8. ¿Cómo encuentro registros que no están unidos?
- 9. sed borrar líneas que no contienen una cadena específica
- 10. ¿Cómo puedo trabajar con archivos Gzip que contienen datos adicionales?
- 11. Eliminar líneas que contienen cierta cadena
- 12. ¿Cómo consulto los campos que contienen un texto dado en MySQL?
- 13. ¿Cómo puedo abrir archivos que contienen acentos en Java?
- 14. Enumere todas las tablas que contienen un nombre de columna dado
- 15. ¿Cómo eliminar el final de una cadena, comenzando desde un patrón dado?
- 16. ¿Cómo encuentro/busca/grep un historial de repositorio SVN?
- 17. Cómo construir un xpath para seleccionar elementos que no contienen una cadena
- 18. ¿Cómo configuro emacs para editar archivos HTML que contienen Javascript?
- 19. ¿Cómo se eliminan los archivos que contienen cierta cadena utilizando el archivo por lotes en Windows?
- 20. Cómo encontrar líneas que contienen una cadena en Linux
- 21. En R, ¿cómo reemplazo una cadena que contiene un cierto patrón con otra cadena?
- 22. ¿Cómo busco archivos en Eclipse para que los resultados muestren archivos que NO contienen el término de búsqueda?
- 23. ¿Cómo encuentro un número en una cadena en Python?
- 24. Dos archivos que contienen la definición de main() Visual Studio?
- 25. ¿Cómo hago que vim abra todos los archivos que coincidan con un patrón en diferentes pestañas?
- 26. Makefile: Filtrar cadenas que contienen un carácter
- 27. ¿Cómo encuentro la posición/ubicación de una ventana dado un hWnd sin NativeMethods?
- 28. ¿Cómo elimino todas las líneas que coinciden con un patrón de un conjunto de archivos?
- 29. ¿Cómo encuentro un lapso con una clase específica que contiene una cadena de texto exacta?
- 30. Sql selecciona las filas que contienen parte de la cadena
Quiere cambiar la grep 0 al final de grep 0 $ (de lo contrario, obtendrá coincidencias erróneas en los archivos que tienen el carácter 0 en su nombre de archivo). – clouseau
@clouseau es en su mayoría correcto ... Sin embargo, 'grep '0 $'' también coincidiría con archivos con múltiplos de 10 líneas. Necesitas 'grep ': 0 $'' al final para verificar un '' 0 '' explícito al final de la línea. Entonces solo obtendrá archivos con cero líneas coincidentes. – TrinitronX
El UNIX en el que estoy conectado no tenía versiones de find o grep con estas opciones, así que tuve que ir con el comando "ack" sugerido en otros comentarios. –