¿Cómo elimino líneas vacías / en blanco (incluidos solo espacios) en un archivo en Unix / Linux usando la línea de comando?
contenido del archivo.txt
Line:Text
1:<blank>
2:AAA
3:<blank>
4:BBB
5:<blank>
6:<space><space><space>CCC
7:<space><space>
8:DDD
salida deseada
1:AAA
2:BBB
3:<space><space><space>CCC
4:DDD

Respuestas:
Esta línea sed debería hacer el truco:
Esto
-isignifica que editará el archivo en el lugar.fuente
\s*es la misma solución dada por la pregunta stackoverflowbad flag in substitute command: 'e'grepLa solución simple es usar el comando
grep( GNU o BSD ) como se muestra a continuación.Eliminar líneas en blanco (sin incluir líneas con espacios).
Elimine las líneas completamente en blanco (incluidas las líneas con espacios).
Nota: Si obtiene colores no deseados, eso significa que sus
grepalias songrep --color=auto(consultetype grep). En ese caso, puede agregar--color=noneparámetros o simplemente ejecutar el comando como\grep(que ignora el alias).ripgrepSimilar con
ripgrep(adecuado para archivos mucho más grandes).Elimine líneas en blanco sin incluir líneas con espacios:
o incluyendo líneas con espacios:
Ver también:
sed: Eliminar líneas vacías usando sedawk: Eliminar líneas en blanco usando awkfuente
grep .Parece ser la solución más simple.grep .las otras soluciones es que resaltará todo el texto en rojo. Las otras soluciones pueden preservar los colores originales. Compareunbuffer apt search foo | grep .conunbuffer apt search foo | grep -v ^$greptiene un aliasgrep --color=autoen su sistema (verifique por :)type grep. Puede ejecutarlo\grepo usar el--color=noneparámetro.grep --color=none ., obtendrá todo el texto blanco, lo que anula el formato de color de la orden original (ejemplo:apt search foo)grep .coincidirá con las líneas que contienen solo espacios, lo que el OP dice que no se desea.d es el comando sed para eliminar una línea.
^$es una expresión regular que coincide solo con una línea en blanco, un inicio de línea seguido de un final de línea.fuente
Puede usar la opción -v con grep para eliminar las líneas vacías coincidentes.
Me gusta esto
fuente
-E, al menos no con GNU grep, pero aparte de eso, ¡estoy muy contento de ver que esto se haga con grep! Es lo que busco en lugar de sed, siempre; Los filtros en línea me parecen mejores que los editores en línea.grep -Ev '^#|^$' file.txtAquí hay una
awksolución:Con Awk,
NFsolo se establece en líneas no en blanco. Cuando esta condición coincide, la acción predeterminada de Awk es imprimir toda la línea.fuente
Para eliminar líneas vacías, puede exprimir nuevas repeticiones de línea con
tr:fuente
xargs si no te importa eliminar espacios en blanco
fuente
Ex / Vim
Aquí está el método que usa el
exeditor (parte de Vim):Para varios archivos (editar en el lugar):
Nota: El
:bufdocomando no es POSIX .Sin modificar el archivo (solo imprima en la salida estándar):
fuente
Para mí, el comando @ martigin-heemels arrojó un error, esto lo solucionó (es decir, un parámetro ficticio para i),
sed -i '' '/^$/d' file.txtfuente
Probablemente la forma más fácil de eliminar líneas en blanco (sin espacios) es usar
cat -s:Al menos si no desea editar un archivo en el lugar pero, por ejemplo, escriba en el terminal. Además, no involucra ningún negocio divertido de expresiones regulares, por lo que es muy fácil de recordar incluso para personas que no son amigables con RE.
De
man cat:-s, --squeeze-blank never more than one single blank linePuede ser diferente en diferentes sistemas operativos, pero estuve presente en algunos Linux y OpenBSD la última vez que lo revisé.
fuente