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.


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:]"

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

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'

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


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

4

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

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

2

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

sed -r 's/\s+//g' filename > output
mv ouput filename

2

Prueba esto:

tr -d " \t" <filename

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


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()

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

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).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.