Comment supprimer les espaces de fin à la fin de la ligne dans des fichiers donnés (plus d'un)?

9

J'en ai tellement marre des espaces inutiles dans les fichiers sources que j'ai même configuré vim pour les montrer.

Le problème est que je dois très souvent (sinon toujours) gérer des espaces inutiles avec mes copains développeurs.

Je voudrais juste analyser les fichiers source (avec une expression régulière) et supprimer les espaces blancs de tous les fichiers donnés.

J'ai fait des recherches sur le Web ("bash remove whiteites" etc.) mais je n'ai pas trouvé quelque chose d'utile.

Olivier Pons
la source
2
Supprimer quels espaces? Sans un exemple de ce que vous voulez supprimer, je ne vois pas comment quelqu'un pourrait vous aider. (Je suppose que ce tr -d ' ' < file.foon'est pas exactement ce que vous cherchez.)
Mat
Comment pouvez-vous faire la différence par programmation entre les espaces inutiles et les espaces utiles? BTW: Vous pouvez utiliser un espace blanc pour loop et mv et sed et collapse;
bsd
Vous pouvez également supprimer les espaces de fin lorsque vous enregistrez vos fichiers dans vim (vous évitant ainsi de relancer cette commande après avoir modifié
Lucas

Réponses:

8

Si par espace blanc inutile vous voulez dire un espace blanc en fin de ligne, cela fonctionnera sur les systèmes GNU:

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

(remplacez *.cpar ce que vos fichiers source correspondent)

Dennis Kaarsemaker
la source
J'ai changé de titre, merci beaucoup pour votre réponse. Quelqu'un a voté contre, parce qu'il pensait peut-être que c'était tellement simple que personne ne devrait poser une telle question ;^). Merci encore.
Olivier Pons
1

C'est un problème récurrent!

perl -i -pe 's/\s+\n/\n/'  ./*.c

(cela supprime également ' \r\n')

J'utilise normalement une version "nrs" légèrement plus complexe (pas d'espaces redondants):

#!/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 !

installez-le: chmod 755 nrs; cp nrs ~/bin; (ou similaire)

et utilise: nrs ./*.c

Ne l'utilisez pas dans des fichiers binaires!

JJoao
la source
0

Pour éviter de toucher des fichiers qui sont déjà OK, avec les outils GNU:

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