¿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
-i
significa que editará el archivo en el lugar.fuente
\s*
es la misma solución dada por la pregunta stackoverflowbad flag in substitute command: 'e'
grep
La 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
grep
alias songrep --color=auto
(consultetype grep
). En ese caso, puede agregar--color=none
parámetros o simplemente ejecutar el comando como\grep
(que ignora el alias).ripgrep
Similar 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 ^$
grep
tiene un aliasgrep --color=auto
en su sistema (verifique por :)type grep
. Puede ejecutarlo\grep
o usar el--color=none
pará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.txt
Aquí hay una
awk
solución:Con Awk,
NF
solo 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
ex
editor (parte de Vim):Para varios archivos (editar en el lugar):
Nota: El
:bufdo
comando 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.txt
fuente
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 line
Puede ser diferente en diferentes sistemas operativos, pero estuve presente en algunos Linux y OpenBSD la última vez que lo revisé.
fuente