Estoy buscando un comando bash para buscar archivos con espacios al final de cada línea. No estoy interesado en eliminar los espacios, sino solo en encontrar los archivos.Bash: buscar archivos con espacios al final de las líneas
Respuesta
Buscar archivos con uno o más caracteres de espacio:
find . -name "*" | xargs egrep ".* +$"
Creo que la pregunta original era encontrar archivos que tienen espacios finales en TODAS las líneas. Sin embargo, podría ser una mala redacción original. – Nit
@Nit dice claramente en el cuerpo, debe haber pasado por alto eso, pero el encabezado de la pregunta puede ser ambiguo. – matcheek
Expandiendo en su solución, 'egrep -m1 -v -l". * + $ "' Debería encontrar todos los archivos que ** no ** tienen espacios finales en cada línea, si no me equivoco? – Nit
buscar los archivos que ha espacios finales.
find . -type f -exec egrep -l " +$" {} \;
Mientras puede hacer con solo 'grep', como han demostrado otras respuestas, usar' find' puede ser una buena idea, si quieres tener más control sobre qué archivos examinar, puedes hacer que el comando 'find' sea mucho más eficiente al usar' + 'en lugar de' \; 'para terminar el primario' -exec' - esto invocará 'egrep' (típicamente) solo _once_, con _todos los nombres de archivos. – mklement0
Tenga en cuenta que esta respuesta encuentra archivos con _al menos 1_ línea con tra iling espacios. Esto definitivamente puede ser útil y es probablemente el caso de uso más común, pero no es lo que el OP solicitó (al menos como lo implica su fraseología, "al final de cada línea"). – mklement0
Si el objetivo es hacer una lista de archivos que se arrastran espacios en blanco en una o más líneas:
grep -r '[[:blank:]]$' .
para no imprimir las líneas, e imprimir sólo los nombres de archivo sólo, especifique también la opción -l
. Eso es l
como en la palabra list
, no el número 1
.
la pregunta dice "al final de ** cada ** línea" – Sorin
@Sorin Voy a adivinar que no era exactamente la intención del OP, pero admitiré que la pregunta realmente dice eso, tomado literalmente ... – twalberg
@twalberg, es lo que lo convierte en una pregunta no trivial, que valdría la tercera respuesta casi idéntica – Sorin
Hay una opción para listar los archivos que no contienen ninguna coincidencia en ninguno de ellos; usa eso y una expresión regular para un personaje que no sea un espacio justo antes del final de la línea.
grep -L '[^ ]$' *
Para recurse directorios, agregue -r
. Para buscar otros caracteres de espacio en blanco también, utilice una clase de caracteres $'[^ \t]$'
o POSIX '[^[:blank:]]$'
para la expresión regular.
Bien hecho. Esto realmente solo devuelve archivos TODAS las líneas tienen espacios finales, con una excepción: los archivos _empty_ (cero bytes) también coinciden. Además, el uso de '*' (sin '-r') dará como resultado advertencias para los subdirectorios, en su caso. '-L' no es compatible con POSIX, pero es ampliamente compatible, dado que tanto GNU grep como BSD lo implementan. – mklement0
@ mklement0 Buena captura sobre los archivos de tamaño cero. Puede usar '-s' para suprimir advertencias sobre directorios, o usar' -r .' si desea recorrer un árbol de directorios completo (el OP no era específico de la tarea). – tripleee
Si la pregunta es, literalmente, para encontrar los archivos que tienen un espacio en blanco al final de cada línea, entonces esto debería funcionar:
grep -rL '[^[:blank:]]$' .
El -L
dice grep
reportar cada archivo que no coincide con el patrón , y el patrón busca líneas que no tengan un espacio en blanco inmediatamente anterior a la nueva línea.
Si el objetivo es archivos de lista con espacios en blanco en la ruta actual:
grep -rli '[[:blank:]]$' .
- 1. '^ M' carácter al final de las líneas
- 2. Retire las líneas vacías de txtfiles, quitar espacios de principio y al final de la línea
- 3. espacios retab Vim al comienzo de las líneas solamente
- 4. Xcode 4.5 - espacios en blanco al final
- 5. RTL muestra números al final de las líneas
- 6. Agregue espacios al final de algunas opciones de autocompletar Bash, pero no a otras?
- 7. Bash: encontrar el archivo con las líneas max contar
- 8. Borrar todos los espacios y pestañas al final de mis líneas
- 9. ¿Cómo ordenar con múltiples líneas en bash?
- 10. Espacio final condicional con finalización programable bash
- 11. Buscar bash, excluir padre?
- 12. ¿Cómo eliminar las dos primeras líneas y las últimas cuatro líneas de un archivo de texto con bash?
- 13. Aptana: buscar y reemplazar pestañas (con espacios)
- 14. bash: ¿pasos de paso con espacios como parámetros?
- 15. Git diff -w ignorar el espacio en blanco solo al inicio y al final de las líneas
- 16. espacios Eliminación al final de una cadena en Java
- 17. Ack buscar con espacios en blanco
- 18. append un texto al final de varios archivos en Linux
- 19. Añadir al final de la línea con sed
- 20. Líneas de continuación de Bash
- 21. ¿Espacios en alias de Cygwin/bash?
- 22. Buscar recursivamente archivos con una extensión específica
- 23. MySQL 5.5 Perdiendo espacios al final en la consulta
- 24. Dif Mercurial: ignorar los espacios en blanco al final?
- 25. Bash leer los descriptores de archivos/escritura - buscar al inicio del archivo
- 26. Concatenar líneas en Bash
- 27. Showdown del editor: Mantener líneas nuevas al final de las oraciones
- 28. Problema con el sobreescritura de archivos en lugar de agregarlo al final
- 29. Barra invertida al final de las líneas de comentario en C/C++
- 30. bash pull ciertas líneas de un archivo
Nota: Aunque el texto de la pregunta (a partir de este escrito) llama sin ambigüedades para la búsqueda de archivos con espacios finales en _each y cada línea_, la inusualidad de este requisito ha dado lugar a algunas respuestas, especialmente la que tiene más votos, en cambio, busca archivos con _una o más_ líneas con espacios finales. – mklement0
sed -n '/ \ + $/p' nombre de archivo – Luv33preet