Lo intenté grep -v '^$'
en Linux y eso no funcionó. Este archivo proviene de un sistema de archivos de Windows.
164
Intenta lo siguiente:
grep -v -e '^$' foo.txt
La -e
opción permite patrones de expresiones regulares para la coincidencia.
Las comillas simples ^$
hacen que funcione para Cshell. Otros proyectiles estarán contentos con comillas simples o dobles.
ACTUALIZACIÓN: Esto funciona para mí para un archivo con líneas en blanco o "todos los espacios en blanco" (como las líneas de Windows con terminaciones de línea de estilo "\ r \ n"), mientras que lo anterior solo elimina archivos con líneas en blanco y terminaciones de línea de estilo Unix:
grep -v -e '^[[:space:]]*$' foo.txt
grep -E -v
, todo después-e
se interpreta como el patrón.grep -v -e '^[[:space:]]*$' -e '^#' file
le dará todas las líneas no en blanco, sin comentarios en un script o archivo de configuración (o cualquier tipo de archivo que use el carácter hash para comentarios).-e
opción permite patrones de expresiones regulares para la coincidencia". Eso es muy engañoso .-e
es una definición (POSIX-) para:This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-).
(del manual ). Grep ya espera una expresión regular (básica) por defecto. Para este patrón, es posible dejar de lado-e
por completo:grep -v '^[[:space:]]*$' foo.txt
.Mantenlo simple.
fuente
Utilizar:
O simplemente simplemente awk:
Si no tiene dos2unix, puede usar herramientas como tr :
fuente
awk
.Ejecutando el código
Para entender más acerca de cómo / por qué funciona esto, recomiendo leer sobre expresiones regulares. http://www.regular-expressions.info/tutorial.html
fuente
Prefiero usar
egrep
, aunque en mi prueba con un archivo genuino con línea en blanco, su enfoque funcionó bien (aunque sin comillas en mi prueba). Esto también funcionó:fuente
Si tiene secuencias de varias líneas en blanco en una fila y solo desea una línea en blanco por secuencia, intente
cat -s
suprime las líneas de salida vacías repetidas.Su salida pasaría de
a
Las tres líneas en blanco en la salida original se comprimirían o "apretarían" en una línea en blanco.
fuente
fuente
Lo mismo que las respuestas anteriores:
Aquí,
grep -e
significa la versión extendida de grep . '^ $' significa que no hay ningún carácter entre ^ (Inicio de línea) y $ (final de línea). '^' y '$' son caracteres regex.Entonces, el comando
grep -v
imprimirá todas las líneas que no coinciden con este patrón (sin caracteres entre ^ y $).De esta forma, se eliminan las líneas en blanco vacías.
fuente
-e
no significa "la versión extendida de grep", ¿quizás te confunden-E
? El manual dice claramente que-e
solo dice explícitamente que sigue un patrón. Dado que el patrón no comienza con un guión, y de todos modos solo está definiendo un patrón, también podría omitirlo, ya que grep espera de manera predeterminada un patrón de expresión regular:grep -v '^$' foo.txt
(no es necesario contar con una funcionalidad de expresión regular extendida). También vale la pena mencionar que esto no elimina las líneas en blanco en el archivo, solo lo que se canaliza a través de la salida. Para ese caso,sed -i
sería la herramienta adecuada.Lo intenté mucho, pero esto parece funcionar (suponiendo
\r
que te muerda aquí):fuente
Usando Perl:
\S
significa emparejar caracteres no en blanco.fuente
egrep -v "^ \ s \ s +"
egrep ya hace expresiones regulares, y el \ s es un espacio en blanco.
El + duplica el patrón actual.
El ^ es para el comienzo
fuente
Utilizar:
fuente
uniq
reducirá las líneas en blanco adyacentes a una sola línea en blanco, pero no las eliminará por completo. Aún así, me gusta tratar de usaruniq
así. Ordenar primero eliminaría efectivamente todas las líneas en blanco, dejando solo una, pero reorganizar el orden de las líneas puede no ser aceptable.Aquí hay otra forma de eliminar las líneas blancas y las líneas que comienzan con el
#
signo. Creo que esto es bastante útil para leer archivos de configuración.fuente
Es cierto que el uso de grep -v -e '^ $' puede funcionar, sin embargo , no elimina las líneas en blanco que tienen 1 o más espacios . Encontré que la respuesta más fácil y más simple para eliminar líneas en blanco es el uso de awk . Lo siguiente es un poco modificado de los chicos de awk anteriores:
Pero como esta pregunta es para usar grep, voy a responder lo siguiente:
Nota : el espacio en blanco entre ^ y *.
O puede usar \ s para representar un espacio en blanco como este:
fuente