C'est un peu surprenant de voir que de nombreuses réponses suggèrent d'utiliser python
pour cette tâche, car il n'y a pas besoin d'écrire un programme de plusieurs lignes pour cela.
Les outils Unix standard comme sed
, awk
ou perl
peut y parvenir facilement, directement à partir de la ligne de commande.
Par exemple, partout où vous avez perl
(Windows, Mac, Linux), ce qui suit devrait permettre de répondre à la demande de l'OP :
perl -i -pe 's/[ \t]+$//;' files...
Explication des arguments pour perl
:
-i # run the edit "in place" (modify the original file)
-p # implies a loop with a final print over every input line
-e # next arg is the perl expression to apply (to every line)
s/[ \t]$//
est une regex de substitution s/FROM/TO/ : remplace chaque espace non vide de fin de ligne (espaces ou tabulations) par rien.
Avantages :
- One liner, aucune programmation nécessaire
- Fonctionne sur plusieurs (n'importe quel nombre) de fichiers
- Fonctionne correctement sur l'entrée standard (aucun argument de fichier n'est donné).
Edit :
Les versions plus récentes de perl
soutien \h
(tout caractère d'espacement horizontal), la solution devient donc encore plus courte :
perl -i -pe 's/\h+$//;' files...
Plus généralement, si vous voulez modifier un certain nombre de fichiers directement à partir de la ligne de commande, en remplaçant chaque apparition de FOO
avec BAR
vous pouvez toujours utiliser ce modèle générique :
perl -i -pe 's/FOO/BAR/' files...
1 votes
Vous êtes sûr que ce n'est pas lié à l'utilisation de
fileinput.FileInput
à la place ?