Intenté grep -v '^$'
en Linux y eso no funcionó. Este archivo proviene de un sistema de archivos de Windows.Eliminar líneas en blanco con grep
Respuesta
intente lo siguiente:
grep -v -e '^$' foo.txt
La opción -e
permite a los patrones de expresión regular para coincidir.
Las comillas simples alrededor de ^$
lo hacen funcionar para Cshell. Otros shells estarán contentos con comillas simples o dobles.
ACTUALIZACIÓN: Esto funciona para un archivo con líneas en blanco o "todo espacio en blanco" (como líneas de ventanas con terminaciones de línea de estilo "\ r \ n"), mientras que el anterior solo elimina archivos con líneas en blanco y unix los finales de línea de estilo:
grep -v -e '^[[:space:]]*$' foo.txt
yo prefiero usar egrep
, aunque en mi prueba con un archivo genuina con su línea en blanco enfoque funcionó bien (aunque sin comillas en mi prueba). Esto funcionó demasiado:
egrep -v "^(\r?\n)?$" filename.txt
Intenté eso. Las líneas en blanco todavía se muestran. ¿Podría ser porque el archivo se creó en Windows? –
se esforzó pero esto parece funcionar (suponiendo \r
que se muerde aquí)
printf "\r" | egrep -xv "[[:space:]]*"
Eso funciona si reemplazo la primera parte con la salida del archivo. –
$ dos2unix file
$ grep -v "^$" file
o simplemente awk
awk 'NF' file
Si Don No tiene dos2unix, entonces puede usar herramientas como tr
tr -d '\r' < "$file" > t ; mv t "$file"
No se puede encontrar el programa dos2unix. ¿Es eso para Windows? el comando ask tampoco funciona. –
preguntar? No, eso es 'awk'. – iconoclast
Un buen punto acerca de la conversión a terminaciones de línea estilo UNIX; de lo contrario, las expresiones regulares pueden no funcionar como se esperaba. Nada aquí funcionó para mí hasta que convertí los finales de línea. –
grep -v "^[[:space:]]*$"
The -v makes it print lines that do not completely match
===Each part explained===
^ match start of line
[[:space:]] match whitespace- spaces, tabs, carriage returns, etc.
* previous match (whitespace) may exist from 0 to infinite times
$ match end of line
Ejecución del código-
$ echo "
> hello
>
> ok" |
> grep -v "^[[:space:]]*$"
hello
ok
Para entender más sobre cómo/por qué esto funciona, recomiendo leer sobre las expresiones regulares. http://www.regular-expressions.info/tutorial.html
¿Cómo y por qué funciona esto? Su respuesta sería mucho mejor si pudiera explicarlo. Por ejemplo, su expresión regular coincide con el comienzo de la cadena y luego con uno o más espacios utilizando el estándar POSIX y luego el final de la cadena, es decir, grep -v elimina todas las líneas que son solo espacios. ¿Derecha? Qué pasa si no hay espacios; es simplemente un personaje de nueva línea? – Ben
Como muestra mi ejemplo, incluso solo se elimina una línea vacía (la primera línea). Agregué más información, así que con suerte eso ayuda. :) – Sepero
grep pattern filename.txt | uniq
'uniq' reducirá las líneas en blanco contiguas a solo una línea en blanco, pero no las eliminará por completo. Aún así, me gusta tratar de usar 'uniq' así. Ordenar primero eliminaría efectivamente todas las líneas en blanco, dejando solo una, pero reorganizar el orden de las líneas puede no ser aceptable. –
Buen punto. Esto también matará líneas repetidas. Supongo que mi solución presenta errores. – baitisj
awk 'NF' file-with-blank-lines > file-with-no-blank-lines
Utilizando Perl:
perl -ne 'print if /\S/'
\S
significa partidos personajes no están en blanco.
aquí hay otra manera de eliminar las líneas blancas y las líneas que comienzan con el signo #. Creo que esto es bastante útil para leer los archivos de configuración.
[[email protected] ~]# cat /etc/sudoers | egrep -v '^(#|$)'
Defaults requiretty
Defaults !visiblepw
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS"
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
stack ALL=(ALL) NOPASSWD: ALL
Igual que las respuestas anteriores
grep -v -e '^$' foo.txt
Aquí, -e grep significa versión extendida de grep. '^ $' significa que no hay caracteres entre^(Inicio de línea) y $ (fin de línea). '^' y '$' son caracteres regex.
Así que el comando grep -v imprimirá todas las líneas que no coinciden con este patrón (sin caracteres entre^y $).
De esta manera las líneas en blanco vacías se eliminan
Hazlo simple.
grep . filename.txt
esto me da todas las líneas del archivo –
@ LưuVĩnhPhúc Debe mostrar todas las líneas del archivo, excepto las líneas en blanco. –
Esto funciona para mí en archivos de un sistema basado en Linux pero no en archivos de Windows. Presumiblemente debido a los caracteres de final de línea de Windows. – ocertat
Si tiene secuencias de múltiples líneas en blanco en una fila, y quiere sólo una línea en blanco por secuencia, tratan
grep -v "unwantedThing" foo.txt | cat -s
cat -s
suprime repiten las líneas de salida vacías.
Su salida iría de
match1
match2
a
match1
match2
Las tres líneas en blanco en la salida original se comprimen o "exprimidos" en una línea en blanco.
egrep -v "^ \ s \ s +"
egrep ya lo hacen expresiones regulares, y el \ s es el espacio en blanco.
El + duplica el patrón actual.
El^es para el inicio
Se puede quitar espacio en blanco con este ejemplo:
grep . filename.txt
- 1. AWK eliminar líneas en blanco
- 2. eliminar líneas en blanco adicionales en emacs
- 3. Grep ignora líneas múltiples
- 4. ¿Cómo identificar y eliminar líneas nuevas y espacios en blanco?
- 5. Eliminar todos los espacios en blanco y las líneas vacías
- 6. línea en blanco después de cada resultado en grep
- 7. Eliminar espacio en blanco inicial del archivo
- 8. Grep Regex: enumere todas las líneas excepto
- 9. Cómo eliminar líneas vacías con o sin espacio en blanco en Python
- 10. ¿Cómo eliminar elementos con espacios en blanco?
- 11. ¿Cuándo se devuelve la declaración con grep vacío/blanco?
- 12. Eliminar la línea en blanco en Eclipse
- 13. Reemplace las líneas nuevas, pero conserve las líneas en blanco
- 14. ¿Cómo insertar líneas en blanco en PDF?
- 15. Contar el número de líneas en un archivo txt con Python excluyendo las líneas en blanco
- 16. comportamiento de los espacios en blanco de expresiones regulares grep
- 17. Grep con las comillas
- 18. líneas grep match only en un rango especificado
- 19. Eliminar líneas verticales en jqGrid
- 20. Eliminar espacio en blanco en una tabla
- 21. Almacenar salida de grep que contiene espacios en blanco en una matriz
- 22. ¿Cómo eliminar las pestañas de las líneas en blanco usando sed?
- 23. Python: use la expresión regular para eliminar el espacio en blanco de todas las líneas
- 24. untabify y eliminar los espacios en blanco finales en emacs
- 25. Eliminar espacios en blanco en cadena XML
- 26. Eliminar los espacios en blanco en AS3
- 27. Eliminar líneas hacia atrás
- 28. Extracción espacios en blanco finales sólo para líneas editadas
- 29. líneas blanco que cruza prestados cubo
- 30. Oracle: cómo eliminar espacios en blanco?
sigue apareciendo líneas en blanco. –
Ver la actualización de la pregunta. – ars
Sí, eso funciona. También funciona con grep. –