Retira o espaço em branco dos arquivos

7

A resposta para remover o espaço em branco à direita com o sed tem a maior parte a resposta, mas eu quero

sed -i 's/[ \t]*$//' $1

para poder usar um número arbitrário de argumentos de arquivo como um script de shell na linha de comando, incluindo argumentos glob. Ou seja suponha que o script seja chamado de strip_trailing_whitespace . Então eu gostaria de poder fazer as duas coisas

strip_trailing_whitespace foo.cc bar.cc

e

strip_trailing_whitespace *.cc *.hh

para remover espaços em branco à direita de todos os arquivos no formato *.cc e *.hh . Argumentos não baseados na resposta citada acima também são bons.

    
por Faheem Mitha 26.10.2011 / 22:38

2 respostas

11

$1 é um parâmetro posicional ; ele será expandido para o primeiro argumento passado para o script. Há similarmente $2 , $3 ... $9 , ${10} , ${11} , ...

O parâmetro especial "$@" será expandido para uma lista de todos os parâmetros posicionais.

Então você pode fazer o seguinte:

sed -i 's/[ \t]*$//' "$@"

Se você quiser passar um glob / pattern para este script (ou para qualquer programa), ele deve ter um escape ou ser citado quando você chama o script - esta é uma função do shell; Ele expandirá todos os padrões antes que seu script o veja. Este caso não deve precisar disso - o shell pode expandir o padrão, e os resultados dessa expansão são passados para sed .

    
por 26.10.2011 / 22:47
6

Acho mais fácil usar sed com xargs da seguinte forma:

find . -name "*.xml" | xargs sed -i 's/[ \t]*$//'

find . -type f | grep cc | xargs sed -i 's/[ \t]*$//'

    
por 22.02.2013 / 20:45