Como remover espaços em branco no final da linha em determinados arquivos (mais de um)?

7

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.

    
por Olivier Pons 09.02.2013 / 13:19

4 respostas

8

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)

    
por 09.02.2013 / 13:34
1

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!

    
por 11.02.2015 / 18:39
0

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 .

    
por 13.12.2015 / 23:19
0

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+$//'
    
por 30.11.2017 / 16:01