2011-09-26 13 views

risposta

22

sed non sa di sequenze di escape come \t. Quindi, si dovrà digitare letteralmente tab sulla console:

sed 's/^ *$//g' <filename> 

Se siete su bash, allora non è possibile digitare tab sulla console. Dovrai fare ^V e quindi premere tab. (Ctrl-V e quindi tab) per stampare una scheda letterale.

+8

Se si utilizza bash, si potrebbe anche fare 'sed $ 's/^ \ t * $ // g'', perché l'utilizzo di un segno di dollaro su una stringa con una singola quotazione sfugge codici come \ t. –

+0

bravo uno Max! Non lo sapevo. Dovresti metterlo come risposta separata .. –

+0

Il tuo è abbastanza vicino. :) –

1

L'altra soluzione pubblicata funzionerà quando è presente la scheda 1 (e solo 1) nella riga. Nota che Raze2dust fa notare che sed richiede di digitare una scheda letterale. Un'alternativa è:

sed '/[^  ]/!s/ //g' file-name.txt 

Quale sostituisce le schede da linee che hanno solo schede. La classe invertita combacia con le righe che contengono un bug di qualsiasi tipo: il seguente '!' fa sì che non corrisponda a quelle linee - cioè solo le linee che hanno solo schede. La sostituzione quindi funziona solo su quelle linee, rimuovendo tutte le schede.

2

Per sostituire le linee di spaziatura arbitrari con una riga vuota, utilizzare

sed -r 's/^\s+$//' 

Il flag -r dice di usare le espressioni regolari estese, e il^\ s + $ modello corrisponde tutte le linee con un po 'di spazio bianco, ma nessun altro carattere .

-1
grep -o ".*" file > a; mv a file; 
+0

E questo fa esattamente? Perché non fa quello che l'OP chiedeva. –

+0

non sicuro se trolling, ma se così, brillante .... – ansiart

0

Ho notato che \ t non è riconosciuto da UNIX. Detto questo, usa la chiave attuale. Nel codice sottostante, TAB rappresenta premendo il tasto tab.

$ sed 's/TAB // g' vecchiofile> nuovofile

punta amichevole: per assicurarsi di avere le schede nel file che si sta tentando di rimuovere le schede da utilizzare il seguente codice per vedere se \ t appare

$ od -c nomefile

Problemi correlati