2011-12-19 30 views

Respuesta

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 @" '- menos' sed'- "llamar" :) – uzsolt

+0

Nota para los usuarios de OS X: la respuesta equivalente es 'sed -E 's/^ + //; s/+ $ //;/^ $/d 'file.txt' (el equivalente a la variante generalizada, '\ s'-based es:' sed -E' s/^ [[: space:]] + //; s/[[: space:]] + $ //;/^ $/d 'file.txt'. (No existe la opción '-r' para' sed' en OS X (a partir de 10.8); '-E'E se activa de forma regular expresiones, que admiten clases de caracteres '[[:..:]]' -style, pero al parecer no sus equivalentes abreviados, como' \ s'.) – mklement0

4

Esto podría funcionar para usted:

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

¡Perfecto! Gracias –

2

similares, pero utilizando ex editor:

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

Para varios archivos:

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

Para volver a colocar de forma recursiva, se puede usar a new globbing option (p. **/*.txt).

1

Método aún más simple usando awk.

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

awk 'NF' - Esto eliminará todas las líneas en blanco/vacío.

awk '{$1=$1;print}' - Esto sólo eliminar los espacios finales blanco, (izquierdo y derecho)

Cuestiones relacionadas