2012-03-31 4 views
29

Desidero rimuovere tutti gli spazi bianchi da un determinato file di testo. C'è qualche comando di shell disponibile per questo? Oppure, come usare sed per questo scopo.Come rimuovere tutti gli spazi bianchi da un determinato file di testo

voglio qualcosa di simile di seguito:

$ cat ciao.txt | sed ....

Ho provato questo: cat hello.txt | sed 's/ //g'. Ma rimuove solo gli spazi, non le schede.

+0

di "all whitespace", intendi anche newlines? –

risposta

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. 

Al fine di eliminare tutti gli spazi bianchi tra cui a capo si può provare:

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

È inoltre possibile utilizzare le classi di caratteri definiti da TR (crediti per htompkins commento):

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

Ad esempio, per cancellare solo lo spazio bianco orizzontale:

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

Puoi anche usare le classi di caratteri definite da 'tr'. Esempi: Per eliminare _all_ spazi bianchi: 'cat file.txt | tr -d "[: space:]" ' Per eliminare tutti gli spazi bianchi orizzontali: ' cat file.txt | tr -d "[: blank:]" ' – htompkins

0

hmm ... sembra che qualcosa nell'ordine di sed -e "s/[ \t\n\r\v]//g" < hello.txt dovrebbe essere nel ballpark giusto (sembra funzionare sotto cygwin in ogni caso).

1

Prova questo:

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

(trovato here)

La prima parte di rimuovere tutte le schede (\t) e gli spazi, e la seconda parte di rimuovere tutte le righe vuote

+0

In realtà funziona. Cura di spiegare sed -e 's/[\ t] // g;/^ $/d' in particolare/^ $/d '. So che^è per l'inizio della stringa, $ è per la fine./d è per eliminare quando si utilizza sed. Ma come questa interpretazione porta alla cancellazione degli spazi bianchi? –

+0

Ho aggiunto una spiegazione. '^ $' corrisponde a una riga vuota poiché sta cercando "start of line" (^) e immediatamente dopo "end of line" ($). – keyser

10

penso che potrebbe usa sed per cancellare lo spazio senza perdere alcune informazioni come cambiare in un'altra riga.

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

+1 per usare '[[: blank:]]' ma -1 per usare cat –

+0

Cosa c'è di sbagliato in 'cat'? – NReilingh

+0

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

11

Molto più semplice a mio parere:

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

Ho appena provato questo e restituisce il testo modificato a STDOUT ma non modifica il file stesso. –

+3

@MaxWilliams - basta usare il flag -i (trattino i) con sed – JeffCharter

+0

Ciò non rimuove le ritorni a capo, non è sicuro se ciò è stato ricercato dall'OP. –

3

Se si desidera rimuovere ALL spazi, anche a capo:

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

Questo è probabilmente il modo più semplice per farlo:

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

Prova questo:

tr -d " \t" <filename 

Vedere la pagina di manuale per Tr (1) per maggiori dettagli.

0

modo più semplice per me ->

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

Amico, Just pitone test.py nel terminale.

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

Questa risposta è simile ad altri però come alcune persone si sono lamentati che l'uscita va a STDOUT Sto solo andando a suggerire ad orientarli verso il file originale e sovrascrivendo. Normalmente non suggerirei questo ma a volte lavori veloci e sporchi.

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