Se por espaço em branco inútil você quer dizer espaços em branco no final da linha, isso funcionará nos sistemas GNU:
find -name '*.c' -print0 | xargs -r0 sed -e 's/[[:blank:]]\+$//' -i
(substitua *.c
com os arquivos correspondentes)
Eu estou tão farto de espaços inúteis em arquivos de código-fonte que eu mesmo configurei o vim para mostrá-los.
O problema é que eu sou muito frequentemente (se não sempre) tenho que lidar com espaços inúteis com meus colegas desenvolvedores.
Gostaria apenas de verificar os arquivos de origem (com uma expressão regular) e remover os espaços em branco de todos os arquivos fornecidos.
Pesquisei na Web ("bash remove whitespace" etc.), mas não encontrei algo útil.
Este é um problema recorrente!
perl -i -pe 's/\s+\n/\n/' ./*.c
(isso também remove ' \r\n
')
Eu normalmente uso uma versão um pouco mais complexa "nrs" (sem espaços redundantes):
#!/usr/bin/perl -pi
s/\h*(\r\n|\n|\r)/\n/g; ## normalize \n (DOS, MAC)
s/^(\xFF\xFE|\xFE\xFF|\xEF\xBB\xBF)//; ## remove BOM !
instale: chmod 755 nrs; cp nrs ~/bin;
(ou similar)
e use: nrs ./*.c
Não use em arquivos binários!
Experimente o Ex-way:
ex +'bufdo!%s/\s\+$//e' -scxa *.*
para remover espaços em branco à direita de todos os arquivos na pasta atual. Para recursão (bash4 / zsh), você pode usar uma nova opção de globbing ( **/*.*
).
Observação: o comando :bufdo
não é POSIX .
Para evitar tocar nos arquivos que já estão bem, com as ferramentas GNU:
grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
xargs -r0 sed -i 's/\s+$//'