[shell] remplacement d'espaces

remplacement d'espaces [shell] - Shell/Batch - Programmation

Marsh Posté le 24-02-2005 à 15:26:46    

Bonjour,
 
J'ai un fichier texte dans lequel je veux enlever les espaces successifs ainsi que les espaces en fin de ligne.
Ex : Ceci     est un test    .
Doit se transformer en : Ceci est un test.
 
J'arrive à enlever tous les espace mais je n'arrive pas à en laisser juste 1.
J'ai essayé ça :

Citation :

sed -e 's/[ ]+/ /g' -e 's/[ ]$//g' test.toto


Mais ça ne marche pas.
Comment faire?

Reply

Marsh Posté le 24-02-2005 à 15:26:46   

Reply

Marsh Posté le 24-02-2005 à 15:49:35    

fgmania a écrit :

Bonjour,
 
J'ai un fichier texte dans lequel je veux enlever les espaces successifs ainsi que les espaces en fin de ligne.
Ex : Ceci     est un test    .
Doit se transformer en : Ceci est un test.
 
J'arrive à enlever tous les espace mais je n'arrive pas à en laisser juste 1.
J'ai essayé ça :

Citation :

sed -e 's/[ ]+/ /g' -e 's/[ ]$//g' test.toto


Mais ça ne marche pas.
Comment faire?


 

Code :
  1. sed -e "s/  \{1,}/ /g" test.toto

(attention, il y a deux espaces entre le "s/" et le "\{" et un espace entre le "}/" et le "/g" )
 
Ca signifie "remplacer tout espace suivi d'un espace répété 1 ou plusieurs fois par un espace unique


Message édité par Sve@r le 24-02-2005 à 15:50:15
Reply

Marsh Posté le 24-02-2005 à 15:50:14    

beur beurk beurk
 
man tr
 
tr -s

Reply

Marsh Posté le 24-02-2005 à 15:59:30    

Ha oui effectivement tr -s ça a l'air d'être pas mal (quand on connait ;) )
Par contre une question par rapport aux expressions régulières et à sed : si je veux dire 1 fois ou plus, je suis obligée de mettre {1,} ou je peut mettre + (j'ai pas vu + dans le man)?

Reply

Marsh Posté le 24-02-2005 à 16:02:49    

fgmania a écrit :

Ha oui effectivement tr -s ça a l'air d'être pas mal (quand on connait ;) )


Oui, le gros pb de Taz c'est qu'il croit qu'on doit tout connaître et que tout ce qui n'est pas fait à sa façon c'est à chier (cf http://forum.hardware.fr/hardwaref [...] 7544-1.htm)

fgmania a écrit :

Par contre une question par rapport aux expressions régulières et à sed : si je veux dire 1 fois ou plus, je suis obligée de mettre {1,} ou je peut mettre + (j'ai pas vu + dans le man)?


 
Tu veux le caractère "x" répété entre 3 et 12 fois

Code :
  1. x\{3,12\}


Tu veux le caractère "x" répété entre 3 et un nombre inconnu de fois

Code :
  1. x\{3,\}


Message édité par Sve@r le 24-02-2005 à 16:06:01
Reply

Marsh Posté le 24-02-2005 à 16:06:18    

Je parlais pas de + pour dire plus grand mais du caractère + des expressions régulières qui veut dire entre 1 et l'infini (en fait qui a exactement la même signification que {1,})

Reply

Marsh Posté le 24-02-2005 à 16:09:33    

désolé, mais tr c'est une commande de base, qu'on apprend avant sed. alors KISS, pas la peine de se lancer dans de longue expressions régulières. Mon intervention ici est concise et donne une bonne solution. Je vois pas quoi ajouter.

Reply

Marsh Posté le 24-02-2005 à 16:16:34    

Ne vous battez pas ^^
Et merci pour TOUTES les réponses.
(je n'ai "appris" ni sed ni tr parce que lorsque je veux faire qq chose en shell je cherche sur google (connais pas shell à l'origine) et donc je ne connais que ce que google veut bien m'apprendre :|).

Reply

Marsh Posté le 24-02-2005 à 16:17:32    

tu sais le shell, c'est rien d'autre qu'une syntaxe qui permet d'enchainer les commandes (programmes).

Reply

Marsh Posté le 24-02-2005 à 16:25:28    

Taz a écrit :

désolé, mais tr c'est une commande de base, qu'on apprend avant sed.


 
D'où tu sors cette théorie ? Ca ça dépend totalement du prof. Les commandes "tr" ou "sed" sont des commandes qui ont chacune une raison précise d'exister et une tâche précise à accomplir. Il n'y a aucune raison d'apprendre l'une ou de donner la préférence à l'une plutôt que l'autre.
 

Taz a écrit :

alors KISS, pas la peine de se lancer dans de longue expressions régulières. Mon intervention ici est concise et donne une bonne solution. Je vois pas quoi ajouter.


Oui, c'est vrai. Si en plus tu avais donné un exemple cela aurait pu faire plaisir à "fgmania" mais on peut pas demander aux dieux de trop se pencher sur les misères humaines :sarcastic:  
 
Maintenant, peut-être que "fgmania", en comprenant ma solution, pourra l'approfondir s'il a des expressions un peu plus complexes impossibles à traiter avec "tr"...


Message édité par Sve@r le 24-02-2005 à 16:27:08
Reply

Marsh Posté le 24-02-2005 à 16:25:28   

Reply

Marsh Posté le 24-02-2005 à 16:30:00    

fgmania a écrit :

Ne vous battez pas ^^
Et merci pour TOUTES les réponses.


 
Les deux fonctionnent. Tu pourras éliminer tes espaces en trop avec "tr" en faisant

Code :
  1. cat toto.test |tr -s ' '


fgmania a écrit :

(je n'ai "appris" ni sed ni tr parce que lorsque je veux faire qq chose en shell je cherche sur google (connais pas shell à l'origine) et donc je ne connais que ce que google veut bien m'apprendre :|).


http://fr.lang.free.fr/cours/Shell_v1.2.doc

Reply

Marsh Posté le 24-02-2005 à 16:45:37    

Sve@r a écrit :

Les deux fonctionnent. Tu pourras éliminer tes espaces en trop avec "tr" en faisant

Code :
  1. cat toto.test |tr -s ' '



 
useless cat of the week


je sais pas pourquoi mais direct ça paraît sérieux

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed