Existem muitas ferramentas que você pode usar para fazer isso. Aqui está uma solução em perl.
Na linha de comando:
perl -p -e 's/^ *//; s/ *$//; chomp' < FILE > OUTFILE
em que você substitui FILE pelo nome do arquivo e OUTFILE pelo novo arquivo no qual deseja que a saída seja gravada. Não use o mesmo nome de arquivo para ambos.
O que ele faz: perl -p executa um script perl em cada linha da entrada obtida e grava o resultado na saída. Você está configurando a entrada e a saída com os operadores < e > para os arquivos desejados. O próprio script segue a opção -e e faz três substituições.
s/^ *// : substitui qualquer número de espaços (espaço, estrela) no início da linha ( ^ ) com nada (o comando s/this/that/ muda this para that ).
Se você espera ter caracteres TAB em vez de espaços, faça s/^[ \t]*// , que substitui qualquer número de espaços ou tabulações ( \t ).
s/ *$// : mesmo, mas no final da linha ( $ ).
chomp : perl-speak para remover a quebra de linha no final de uma linha.