2012-03-31 28 views
29

Quiero eliminar todos los espacios en blanco de un archivo de texto determinado. ¿Hay algún comando de shell disponible para esto? O bien, cómo usar sed para este propósito.Cómo eliminar todos los espacios en blanco de un archivo de texto dado

quiero algo, como a continuación:

$ hola.txt gato | sed ....

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

+0

por "all whitespace", ¿te refieres a newlines también? –

Respuesta

53
$ 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. 

Con el fin de eliminar todos los espacios incluyendo saltos de línea que puede probar:

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

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

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

Por ejemplo, para borrar el espacio en blanco horizontal:

cat file.txt | tr -d "[:blank:]" 
+13

También puede usar las clases de caracteres definidas por 'tr'. Ejemplos: Para borrar _all_ whitespace: 'cat file.txt | tr -d "[: space:]" ' Para eliminar todos los espacios en blanco horizontales: ' cat file.txt | tr -d "[: blank:]" ' – htompkins

0

hmm ... parece que algo del orden de sed -e "s/[ \t\n\r\v]//g" < hello.txt debe estar en el lugar correcto (parece que funciona bajo cygwin en cualquier caso).

1

Prueba esto:

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

(encontrado here)

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

+0

Esto realmente funciona. Cuidado para explicar sed -e 's/[\ t] // g;/^ $/d' en particular/^ $/d '. Lo sé^es para el inicio de la cadena, $ es para el final./d es para eliminar cuando se usa sed. Pero, ¿cómo esta interpretación lleva a la eliminación de espacios en blanco? –

+0

Agregué una explicación. '^ $' coincide con una línea vacía ya que está buscando "inicio de línea" (^) y luego inmediatamente después, "fin de línea" ($). – keyser

10

Creo que puede use sed para eliminar el espacio sin perder información como cambiar a otra línea.

cat hello.txt | sed '/^$/d;s/[[:blank:]]//g' 
+2

+1 para usar '[[: blank:]]' pero -1 para usar cat –

+0

¿Qué pasa con 'cat'? – NReilingh

+0

@NReilingh - https://www.google.com/search?q=useless+uses+of+cat – jayhendren

11

mucho más sencillo de mi opinión:

sed -r 's/\s+//g' filename 
+1

Acabo de probar esto y envía el texto modificado a STDOUT pero no cambia el archivo. –

+3

@MaxWilliams: simplemente use la bandera -i (dash i) con sed – JeffCharter

+0

Esto no elimina las nuevas líneas, no estoy seguro de si OP quería eso. –

3

Si desea eliminar TODO espacios en blanco, incluso los saltos de línea:

perl -pe 's/\s+//g' file 
1

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

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

Prueba esto:

tr -d " \t" <filename 

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

0

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

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

Amigo, test.py pitón Justo a su 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() 
0

Esta respuesta es similar a otra sin embargo, como algunas personas se han quejado de que la salida va a STDOUT que sólo voy a sugerir volver a enviarlos al archivo original y sobrescribirlo. Normalmente nunca recomendaría esto, pero a veces trabajos rápidos y sucios.

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