2011-12-19 34 views

risposta

34
$ sed 's/^ *//; s/ *$//; /^$/d' file.txt 

`s/^ *//` => left trim 
`s/ *$//` => right trim 
`/^$/d` => remove empty line 
+4

'sed -r 's/^ \ s * //; s/\ s * $ //;/^ $/d'' – kev

+0

' sed -r "/^\ s * \ $/d; s @^\ s * (. *) \ s * \ $ @ \ 1 @" '- meno' sed'- "calling" :) – uzsolt

+0

Nota per gli utenti OS X: la risposta equivalente è 'sed -E 's/^ + //; s/+ $ //;/^ $/d 'file.txt' (l'equivalente alla variante generalizzata, '\ s' è:' sed -E' s/^ [[: space:]] + //; s/[[: spazio:]] + $ //;/^ $/d 'file.txt'. (Non esiste l'opzione '-r' per' sed' su OS X (a partire da 10.8); '-E' si attiva regolarmente esteso espressioni, che supportano le classi di caratteri '[[:::]]', ma apparentemente non sono equivalenti di stenografia come' \ s'.) – mklement0

4

Questo potrebbe funzionare per voi:

sed -r 's/^\s*(.*\S)*\s*$/\1/;/^$/d' file.txt 
+0

Perfect! Grazie –

2

simile, ma utilizzando ex redattore:

ex -s +"g/^$/de" +"%s/^\s\+//e" +"%s/\s\+$//e" -cwq foo.txt 

Per più file:

ex -s +'bufdo!g/^$/de' +'bufdo!%s/^\s\+//e' +'bufdo!%s/\s\+$//e' -cxa *.txt 

Per sostituire in modo ricorsivo, è può usare a new globbing option (ad es. **/*.txt).

1

Ancora più semplice utilizzando awk.

cat filename.txt | awk 'NF' | awk '{$1=$1;print}' 

awk 'NF' - Questo rimuoverà tutti/righe vuote vuote.

awk '{$1=$1;print}' - Questo sarà solo rimuovere gli spazi finali bianco, (destro e sinistro)

Problemi correlati