Cómo eliminar todos los espacios en blanco de un archivo de texto determinado

81

Quiero eliminar todos los espacios en blanco de un archivo de texto determinado. ¿Hay algún comando de shell disponible para esto? O cómo usarlo sedpara este propósito.

Quiero algo como a continuación:

$ cat hello.txt | sed ....

Intenté esto: cat hello.txt | sed 's/ //g'.Pero elimina solo espacios, no pestañas.

Hongos lunares
fuente
3
por "todos los espacios en blanco", ¿te refieres también a nuevas líneas?
Glenn Jackman

Respuestas:

132
$ man tr
NAME
    tr - translate or delete characters

SYNOPSIS
    tr [OPTION]... SET1 [SET2]

DESCRIPTION
   Translate, squeeze, and/or delete characters from standard 
   input, writing to standard output.

Para borrar todos los espacios en blanco, incluidas las nuevas líneas, puede probar:

cat file.txt | tr -d " \t\n\r" 

También puede utilizar las clases de caracteres definidas por tr (créditos al comentario de htompkins ):

cat file.txt | tr -d "[:space:]"

Por ejemplo, para borrar solo el espacio en blanco horizontal:

cat file.txt | tr -d "[:blank:]"
Paulo Scardine
fuente
23
También puede utilizar las clases de caracteres definidas por tr. Ejemplos: Para eliminar todos los espacios en blanco: cat file.txt | tr -d "[:space:]" Para eliminar todos los espacios en blanco horizontales:cat file.txt | tr -d "[:blank:]"
htompkins
@ user3901666 eliminará los espacios en blanco, sí, si la salida producida coincide con lo que desea es difícil de decir, ¿qué ha probado?
Paulo Scardine
24

Mucho más simple en mi opinión:

sed -r 's/\s+//g' filename
Lucie G
fuente
2
Acabo de probar esto y genera el texto modificado en STDOUT pero no cambia el archivo en sí.
Max Williams
4
@MaxWilliams: solo use la bandera -i (guión i) con sed
JeffCharter
1
Esto no elimina las nuevas líneas, no estoy seguro de si OP lo quería.
Graeme Moss
11

Creo que puede usar sed para borrar el espacio sin perder algo de información, como cambiar a otra línea.

cat hello.txt | sed '/^$/d;s/[[:blank:]]//g'
Umae
fuente
4
Bien, pero no creo que pueda tr -d " " < infile.txt > outfile.txt
animarme
Hola, esto funciona gracias, pero agradecería alguna explicación.
David Okwii
10

Prueba esto:

sed -e 's/[\t ]//g;/^$/d' 

(encontrado aquí )

La primera parte elimina todas las pestañas ( \t) y los espacios, y la segunda parte elimina todas las líneas vacías

keyer
fuente
Esto realmente funciona. Tenga cuidado de explicar sed -e 's / [\ t] // g; / ^ $ / d' particularmente / ^ $ / d '. Sé que ^ es para el inicio de la cadena, $ es para el final. / d es para eliminar cuando se usa sed. Pero, ¿cómo lleva esta interpretación a la eliminación de espacios en blanco?
David Okwii
Agregué una explicación. ^$coincide con una línea vacía, ya que busca "inicio de línea" (^) e inmediatamente después, "final de línea" ($).
keyer
5

Si desea eliminar TODOS los espacios en blanco, incluso nuevas líneas:

perl -pe 's/\s+//g' file
Glenn Jackman
fuente
4

La forma más fácil para mí ->

        echo "Hello my name is Donald" | sed  s/\ //g
DDD
fuente
2

Esta es probablemente la forma más sencilla de hacerlo:

sed -r 's/\s+//g' filename > output
mv ouput filename
Gorton Gyojin
fuente
2

Prueba esto:

tr -d " \t" <filename

Consulte la página de manual de tr (1) para obtener más detalles.

usuario3653982
fuente
2

Amigo, solo python test.py en tu terminal.

f = open('/home/hduser/Desktop/data.csv' , 'r')

x = f.read().split()
f.close()

y = ' '.join(x)
f = open('/home/hduser/Desktop/data.csv','w')
f.write(y)
f.close()
Agnibesh Chauhan
fuente
Perdón por tropezar con un hilo antiguo, pero ¿no es f.read().strip("\t\n\r ")más eficiente?
Jachdich
¿Qué sucede si hay dos o más espacios, pestañas, etc. palabras en blanco y negro o más? Creo que su solución es para espacios en blanco iniciales y finales. Si desea un delineador, puede convertir fácilmente el código anterior.
Agnibesh Chauhan
2

Sin embargo, esta respuesta es similar a otras, ya que algunas personas se han quejado de que la salida va a STDOUT, solo voy a sugerir que se redirija al archivo original y se sobrescriba. Normalmente nunca sugeriría esto, pero a veces trabajos rápidos y sucios.

cat file.txt | tr -d " \t\n\r" > file.txt
Omar Essilfie-Quaye
fuente
1

hmm ... parece que algo del orden de sed -e "s/[ \t\n\r\v]//g" < hello.txtdebería estar en el estadio correcto (parece funcionar bajo cygwin en cualquier caso).

Jerry Coffin
fuente