¿Cómo eliminar líneas en blanco de un archivo (incluyendo tabulación y espacios)?


Respuestas:


26

Solo greppara no espacios en blanco:

grep '[^[:blank:]]' < file.in > file.out

[:blank:], dentro de los rangos de caracteres ( [...]), se llama una clase de caracteres POSIX. Hay algunos como [:alpha:], [:digit:]... [:blank:]coincide con el espacio en blanco horizontal (en la configuración regional POSIX, eso es espacio y pestaña, pero en otras configuraciones regionales podría haber más, como todos los caracteres de espaciado horizontal Unicode en configuraciones regionales UTF8) mientras [[:space:]]coincide con el blanco horizontal y vertical caracteres de espacio (igual que [:blank:]más cosas como tabulación vertical, avance de formulario ...).

grep '[:blank:]'

Volvería las líneas que contienen cualquiera de los caracteres, :, b, l, a, no k. Las clases de caracteres solo se reconocen dentro [...]y ^dentro [...]del conjunto. Entonces [^[:blank:]]significa cualquier personaje menos los en blanco.


1
¿debería haber también un $fin de línea?
Michael Durrant

@MichaelDurrant No está anclado en ninguno de los lados
jordanm

1
@MichaelDurrant. [^[:blank:]]$solo coincidiría con las líneas que terminan en un espacio en blanco. Queremos líneas que contengan un espacio en blanco en cualquier lugar
Stéphane Chazelas

@StephaneChazelas Intenté grep [: blank:] SOURCEFILE incluso este comando está funcionando. Entiendo que [] es para la clase de personaje, ¿podría darme una idea de cómo funciona? el fragmento: en blanco: es nuevo para mí.
Jamshed Ansari user3000272

¿Hay casos en los grep -E '\S'que no funcionaría?
terdon

21

Aquí hay una awksolución:

$ awk NF file

Con awk, NFsolo se establece en líneas no en blanco. Cuando esta condición coincide, la awkacción predeterminada que printse imprimirá toda la línea.


Aseado, esto también elimina líneas con espacios en blanco.
wisbucky

7

Qué tal si:

sed -e 's/^[[:blank:]]*$//' source_file > newfile

o

sed -e '/^[[:blank:]]*$/d' source_file > newfile

es decir

Para cada línea, sustituya:

  • si comienza (" ^")
  • con espacios o tabulaciones (" [[:blank:]]") cero o más veces (" *")
  • y luego es el final de la línea (" $")

Más información sobre :: blank :: y otros caracteres especiales en http://www.zytrax.com/tech/web/regex.htm#special


44
[[:space:]]Incluye pestañas. Si no fuera así, su expresión regular fallaría si un espacio siguiera a una pestaña.
jordanm

Las páginas de manual wctype(3)y isalpha(3)describen con qué coincidirán las clases de caracteres.
jordanm

Es posible que desee eliminar el primero que no responde la pregunta.
Stéphane Chazelas

@MichaelDurrant, ¿puedes escribir algo sobre [[: blank:]]?
Jamshed Ansari user3000272

Se agregó información para [[: blank ::]]. Stephane, ¿por qué no funciona el primer trabajo? Pensé que // al final reemplazaría la línea sin nada.
Michael Durrant

4

Puede usar el sedcomando para eliminar líneas en blanco:

sed '/^$/d' in > out

Este comando elimina todas las líneas vacías del archivo "en"


Eso no elimina las líneas que contienen solo espacio y tabulación, como se solicitó específicamente.
dave_thompson_085

3

Parece que encontré uno no tan rápido, pero divertido al fin:

| xargs -L1


1
Bonito y corto, pero hace más: eliminar los espacios iniciales y las pestañas también.
jringoot

Oh, ¿se descubrió que es aún más capaz? - ¡Agradable! ;-P
poige

1
Y trunca las líneas (predeterminado en 1024 caracteres) Ver páginas de manual: linux.die.net/man/1/xargs
jringoot

¡Me estoy enamorando más de esa herramienta simple! 11)
poige


0

Use el siguiente comando:

grep '\S' FILE

que elimina todas las líneas, incluidos los espacios o las pestañas.

De lo contrario, la eliminación no incluye líneas con espacios / tabulaciones, use:

grep . FILE

Por ejemplo:

$  printf "line1\n\nline2\n \nline3\n" > FILE
$  cat -v FILE
line1

line2

line3
$  grep '\S' FILE
line1
line2
line3
$  grep . FILE
line1
line2

line3

Ver también:

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.