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

9

Estou tão farto de espaços inúteis nos arquivos de origem que até configurei o vim para mostrá-los.

O problema é que muitas vezes (se não sempre) tenho que lidar com espaços inúteis com os desenvolvedores de meus companheiros.

Gostaria apenas de verificar os arquivos de origem (com uma expressão regular) e remover os espaços em branco de todos os arquivos.

Pesquisei na Web ("bash remove espaço em branco" etc.), mas não encontrei algo útil.

Olivier Pons
fonte
2
Remova o espaço em branco? Sem um exemplo do que você deseja remover, não vejo como alguém poderia ajudá-lo. (Eu estou supondo que tr -d ' ' < file.foonão é exatamente o que você está procurando.)
Mat
Como você pode diferenciar programaticamente a diferença entre espaço em branco inútil e espaço em branco útil? BTW: Você pode usar um loop for e mv e sed e recolher o espaço em branco;
BSD
Você também pode remover o espaço em branco à direita ao salvar seus arquivos no vim (poupando-lhe o problema de executar novamente este comando depois de editar algo): unix.stackexchange.com/questions/75430/…
Lucas

Respostas:

8

Se por espaço em branco inútil você quer dizer espaço em branco à direita no final da linha, isso funcionará nos sistemas GNU:

find -name '*.c' -print0 | xargs -r0 sed -e 's/[[:blank:]]\+$//' -i

(substitua *.cpelo que seus arquivos de origem corresponderem)

Dennis Kaarsemaker
fonte
Eu mudei o título, muito obrigado pela sua resposta. Alguém votou contra, porque, talvez ele achasse tão simples, que ninguém deveria fazer essa pergunta ;^). Mais uma vez obrigado.
Olivier Pons
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 "nrs" um pouco mais complexa (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!

JJoao
fonte
0

Para evitar tocar em arquivos que já estão OK, com as ferramentas GNU:

grep -rlZ --binary-files=without-match --include='*.c' '\s$' . |
  xargs -r0 sed -i 's/\s+$//'
Stéphane Chazelas
fonte