Suppression de blanc en fin de ligne

Fermé
nono - 17 sept. 2004 à 17:01
 mclane1 - 20 oct. 2010 à 12:20
Bonjour,

Je dois charger un fichier mais manque de chance il y a des blancs en fin de ligne. Comment puis je les supprimer pour avoir une taille beaucoup plus pettite.

D'avance merci
A voir également:

6 réponses

loomchild Messages postés 6 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 17 septembre 2004 6
17 sept. 2004 à 21:46
bonjour,

je m'excuse, mais ca ne me semble pas tres optimise comme solution, si je puis
me permettre...

En ouvrant ton fichier avec emacs, ca devrait aller vite:
M-x delete-trailing-whitespaces

Ensuite tu sauves:
C-X C-s

Ensuite tu quittes:
C-x C-c

--
Loomchild - ecchi nano wa ikeru to omoimasu
4
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
18 sept. 2004 à 18:21
Utilise sed (stream editor), le plus classique , un peu cryptique,
je préfère PERL pour les traitement filtres plus complexes.

exemple avec sed
# afin de faire apparaître explicitement les fins de ligne j'ai ajouté un f à la fin de certaines lignes
johand@horus:~/tmp$ cat brol
ligne1   f
blahbla salut  f
blah3    f
1234 5685 00 f
wxcvf
kkkkkk

johand@horus:~/tmp$ sed -e 's/  *f$//' < brol
ligne1
blahbla salut
blah3
1234 5685 00
wxcvf
kkkkkk
johand@horus:~/tmp$ sed --version
GNU sed version 4.1.2
....

explications
Le pattern " *f$"
recherche un ou plusieur espaces en fin de ligne avec notre f conventionnel
(méta-caractère $ : fin de ligne)
La commande "s" demande une substitution, ici une chaine vide entre les // finaux.
Tu peux écrire un script qui effectue un backup de ton fichier et rediriger la sortie.
exemple:
cp $MONFICHIER ${MONFICHIER}-bak
sed -e 's/ *f$//' < ${MONFICHIER}-bak > $MONFICHIER
rm ${MONFICHIER}-bak


Normalement
sed -e '/ +f$/d' < brol
devrait fonctionner ( " +" : au moins un espace) et fournir une solution plus lisible et plus élégante mais cela ne semble pas fonctionner . Je cherche l'erreur.


Johan

Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
1
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
18 sept. 2004 à 18:42
Salut :)
Normalement
sed -e '/ +f$/d' < brol
devrait fonctionner ( " +" : au moins un espace) et fournir une solution plus lisible et plus élégante mais cela ne semble pas fonctionner . Je cherche l'erreur.


Ca ne fonctionne pas pour deux raison :)
La premiere, l'implementation des expressions regulieres n'est pas completement correcte dans sed donc un plus est interprété litteralement, il faut l'echapper
sed -e '/ \+f$/d' <brol

La seconde, c'est que le 'd' est utiliser pour detruire la ligne, et non le pattern, donc l'effet n'est pas celui attendu ;-)

...Mana mana
   Tutudutu...
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
18 sept. 2004 à 18:53
Bonche, il en manquait un bout, sur une option de sed que j'avait utilisé pour les backup, mais ça se trouve pas dans toute les version... donc autant faire simple :)
cat brol | sed 's/ \+f$//' >brol :)
@++
...Mana mana
Tutudutu...
0
Salut,

Dans ton cas plusieurs solutions sont possibles...


a partir d'un éditeur de texte, tu remplace les " " par " ", jusqu'a ce qu'il y ai plus! tous les blancs en double seront remplacés par un seul, à répéter jusqu'à plus soif!


Sur le même principe, tu remplaces le blanc en fin de ligne avec le saut à la ligne par un saut à la ligne, ce qui fait que seul le blanc en fin de ligne (en fin des lignes) est supprimé, pareil jusqu'à plus soif!

Il y a encore d'autres méthodes c'est plus chiant (en C Java et autre)! si c'est juste pour balancer un texte, c'est pas la peine de s'emmmmmerder plus!
0
Salut!


un utilisateur standard ne cherche pas forcément une solution "optimisée" peut-être une solution simple!

"emacs" cnnais pas, si il faut encore installer un truc qu'on à pas, en ligne de commande.... je sais pas s'il y a "optimisation"



A négocier.
0
Bonjour,

Effectivement emacs n'est pas en ligne de commande. Je cherche une solution simple.

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
18 sept. 2004 à 18:59
D'accord pour le "d" qui est une faute de copier coller.
D'accord l'implémentation n'est pas très correcte.
(je venais de reprendre l'O'Reilly à ce sujet pour vérifier si je me trompais)
En tout cas ce type d'expression régumière fonctionne normalement avec PERL. A investiguer /signaler .

johand@horus:~/tmp$ cat brol
ligne1 f
blahbla salut f
blah3 f
1234 5685 00 f
wxcvf
kkkkkk

johand@horus:~/tmp$ perl -ne 's/ +f$//; print ;' brol
ligne1
blahbla salut
blah3
1234 5685 00
wxcvf
kkkkkk

Remarquons qu'on peux écrire très vite du code incompréhensible en PERL .
C'est que je n'utilise pas souvent sed ;(
Conseillons alors PERL , awk ou Python

Johan
Gates gave you the windows.
GNU gave us the whole house.(Alexandrin)
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
18 sept. 2004 à 19:08
Yop, ça devrait fonctionner pareil... :)
Mais non :(
ce qui fit qu'a utiliser sed trop souvent on fait des expression incorrecte et qua on ne l'utilises pas assez souvent on passe deux heures retrouver à le truc :-s

Ceci dit, c'est peut-etre mieux implementé maintenant, vu que le dernier que j'ai compilé avait un certain nombre d'option en plus (dont celle des backup, bien pratique) là, sur un vieux compiler pas par moi, ca marche pas.

Enfin si mes souvenir sont juste, c'est une option de compilation qu'il faut rajouter, je ne sais pas pourquoi elle n'est pas plus utilisée :-(

@+
...Mana mana
   Tutudutu...
0
En utilisant n'importe quel outil d'expression régulière
Perso, j'utilise ConTeXt qui permet les recherches par expression régulière et je fait :
Rechercher depuis le début
dans le fichier en cour
une recherche par expression régulière
dans le champ de recherche je mets sans les guillemets : " *$"
et dans le cadre réservé au remplacement je mets rien.
Ca va te remplacer les espaces (1er caractère) en nombre illimité (l'étoile) qu'il y ait 1 ou plusieurs espaces en fin de ligne (le dollar).
0