Quiero eliminar todas las líneas vacías de un archivo. Incluso si la línea contiene espacios o pestañas, también debe eliminarse.
Quiero eliminar todas las líneas vacías de un archivo. Incluso si la línea contiene espacios o pestañas, también debe eliminarse.
Respuestas:
Solo grep
para 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
, n
o k
. Las clases de caracteres solo se reconocen dentro [...]
y ^
dentro [...]
del conjunto. Entonces [^[:blank:]]
significa cualquier personaje menos los en blanco.
[^[: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
grep -E '\S'
que no funcionaría?
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:
^
")[[:blank:]]
") cero o más veces (" *
")$
")Más información sobre :: blank :: y otros caracteres especiales en http://www.zytrax.com/tech/web/regex.htm#special
[[:space:]]
Incluye pestañas. Si no fuera así, su expresión regular fallaría si un espacio siguiera a una pestaña.
wctype(3)
y isalpha(3)
describen con qué coincidirán las clases de caracteres.
Puede usar el sed
comando para eliminar líneas en blanco:
sed '/^$/d' in > out
Este comando elimina todas las líneas vacías del archivo "en"
Parece que encontré uno no tan rápido, pero divertido al fin:
| xargs -L1
Intenta ex -way:
ex -s +'v/\S/d' -cwq test.txt
Para varios archivos (editar en el lugar):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Nota: El :bufdo
comando no es POSIX .
Sin modificar el archivo (solo imprima en la salida estándar):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
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:
sed
: Eliminar líneas vacías usando sedawk
: Eliminar líneas en blanco usando awk
$
fin de línea?