2013-12-11 23 views
20

ho file in cui voglio rimuovere lo spazio bianco dalla fine della linea di test.txt è la seguente (non v'è spazio bianco alla fine della riga.rimuovere lo spazio bianco alla fine della linea in linux

ath-miRf10005-akr 
ath-miRf10018-akr 
ath-miRf10019-akr 
ath-miRf10020-akr 
ath-miRf10023-akr 
ath-miRf10024-akr 

ho usato sed 's/$\s//' ma non funziona

+1

penso che il comando deve essere 'sed 's/\ s * $ //'' invece. Il '$ 'indica l'ancoraggio di fine linea, quindi nulla viene dopo quello su ogni riga. –

+0

right $ define end of object (working buffer) quindi non c'è niente dopo la fine. Per lo stesso motivo non c'è nulla che dia inizio (^) così ogni pattern ha^come primo elemento se presente e $ alla fine se presente (per conformità a POSIX, non vero quando viene usata un'azione come [[OR logico]) – NeronLeVelu

risposta

28

utilizzare un semplice vuoto * o [:blank:]* per rimuovere tutti gli spazi possibili alla fine della linea:.

sed 's/ *$//' file 

Uso della classe [:blank:] si sta rimuovendo gli spazi e le schede:

sed 's/[[:blank:]]*$//' file 

Nota questo è POSIX, quindi compatibile sia GNU sed e BSD.

Per GNU sed è possibile utilizzare l'estensione GNU \s* per abbinare spazi e schede, come descritto in BaBL86's answer. Vedere le specifiche POSIX su Basic Regular Expressions.


Testiamo con un file semplice che consiste solo su linee, due con solo spazi e l'ultimo anche con le schede:

$ cat -vet file 
hello $ 
bye $ 
ha^I $  # there is a tab here 

rimuovere solamente spazi:

$ sed 's/ *$//' file | cat -vet - 
hello$ 
bye$ 
ha^I$  # tab is still here! 

Rimuovere spazi e tabulazioni:

$ sed 's/[[:blank:]]*$//' file | cat -vet - 
hello$ 
bye$ 
ha$   # tab was removed! 
+1

Solo curioso : funzionerà per '\ t' e caratteri bianchi simili? Che dire dell'uso di '[: space:]'? –

+1

Buona domanda, @HermanTorjussen.Per farlo ho notato che devi usare '[[: space:]]'. – fedorqui

+1

la classe di carattere '[: space:]' comprende tutti gli spazi bianchi (comprese le nuove linee e i ritorni a capo) - '[: blank:]' è solo spazio bianco orizzontale (spazio e tabulazione) - vedi https: //en.wikipedia. org/wiki/Regular_expression # Character_classes –

16

Prova questo:

sed -i 's/\s*$//' youfile.txt 
+0

Grazie per questo è esattamente ciò di cui avevo bisogno. – Natim

+3

Questo non funziona per me su OSX con GNU 'sed'. – stiemannkj1

2
sed -i 's/[[:blank:]]\{1,\}$//' YourFile 

[: blank:] è per lo spazio, scheda principalmente e {1,} escludere 'nessuno spazio alla fine' del processo di sostituzione (senza grande impatto significativo se la linea sono brevi e il file sono di piccole dimensioni)

1

Se le linee sono esattamente il modo in cui loro (senza spazi iniziali o incorporati ritraggono), il seguente dovrebbe servire come pure

awk '{$1=$1;print}' file.txt 
+0

Potrebbe essere abbreviato in "awk" {$ 1 = $ 1} 1 'file.txt' – Jotne

0

Questo potrebbe funzionare per voi (sed GNU):

sed -ri '/\s+$/s///' file 

questo sembra per gli spazi bianchi alla fine della linea e se presente e lo rimuove.

0

Provare a utilizzare

cat kb.txt | sed -e 's/\s$//g'