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 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.
[^[: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 sedcomando 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 :bufdocomando 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?