[Shell] Sed : Remplacer un \ par \\ dans un path

Sed : Remplacer un \ par \\ dans un path [Shell] - Shell/Batch - Programmation

Marsh Posté le 23-04-2008 à 11:32:14    

Bonjour,
 
Comme le titre l'indique, je dois remplacer le caractère anti-slash \  par 2 anti-slash \\
J'ai une chaine (présente dans un fichier a.txt) sous la forme :  r:\foo\foobar
j'aimerai la transformer sous la forme :  r:\\foo\\foobar
 
J'ai cherché dans la doc de sed, mais pour le caractère anti-slash , c'est ambigüe...  
j'ai testé les commandes suivantes sans résultats :
sed "s/\/\\/g" a.txt > b.txt
sed "s/[\]/[\\]/g" a.txt > b.txt
 
 Avez vous une idée sur comment lui faire prendre en compte les \  ?
 
 Merci de votre aide.   :jap:

Reply

Marsh Posté le 23-04-2008 à 11:32:14   

Reply

Marsh Posté le 23-04-2008 à 11:51:14    

$ cat fichier.txt
r:\foo\foobar
$ sed -e 's/\\/\\\\/g' fichier.txt
r:\\foo\\foobar


Message cité 1 fois
Message édité par chaica le 23-04-2008 à 13:50:57
Reply

Marsh Posté le 23-04-2008 à 12:01:57    

chaica a écrit :

$ cat fichier.txt  
r:\foo\foobar
carl@carl-bureau:~/progra/sed$ sed -e 's/\\/\\\\/g' fichier.txt  
r:\\foo\\foobar




 
 
Yeaaah merci bien !
Je pensai pas que l'option -e résoudrait le probleme !
 
Dans la doc que j'ai lu, l'option -e servait à indiquer que l'expression qui suit la premiere n'est pas un chemin de fichier mais bien une autre commande :  
 
sed 's/color/colour/g' 's/flavor/flavour/g' filename  
 
but it wouldn't work. sed would look for a file named "g" in the directory "s/flavor/flavour". The "-e" flag to sed makes it realize that the next option is a part of the script, instead of a filename.

 
En tout cas, merci beaucoup Chaica !  :jap:

Reply

Marsh Posté le 23-04-2008 à 13:50:07    

$ sed 's/\\/\\\\/g' fichier.txt  
r:\\foo\\foobar


Reply

Marsh Posté le 23-04-2008 à 15:55:30    

Je crois avoir essayer cette méthode en vain... Mais en tout cas ,ta premiere réponse marche nickel !
 
J'ai une deuxieme question qui sort un peu du cadre là, mais voilà, je viens de terminier mon script, il passe sur un fichier qui compte pas loin de 8000 lignes, et il met pas loin de 2h pour effectuer tout mes traitements (dans une boucle, je fait appel à la fonction "echo" et "cut" ).
Est ce que si je passe mon script sous python ou perl, est ce que j'aurai de meilleures perfs ?  
 
 Merci.

Reply

Marsh Posté le 23-04-2008 à 16:00:43    

Sans hésitation : oui. Avec des différences de performances tres significatives, de l'ordre de plusieurs ordres de grandeur.


Message édité par Elmoricq le 23-04-2008 à 16:01:15
Reply

Marsh Posté le 23-04-2008 à 16:04:12    

Merci bien.  C'est donc décidé... GOTO Perl !
Merci pour tout. :jap:

Reply

Marsh Posté le 24-04-2008 à 14:35:32    

A mon avis si tu met 2 heures pour 8000 ligne, le problème ce n'est pas vraiment le langage, c'est la façon dont tu as fais ton script. Je suppose que tu fais des operations qui demandent à chaque fois de lire le fichier en entier, ou des conneries dans ce genre.

Reply

Marsh Posté le 24-04-2008 à 17:59:26    

En fait non... Je ne lui demande pas de lire le fichier en entier à chaque passage de boucle.
Juste que dans la boucle qui parcour le fichier, pour chque ligne, je met en forme la ligne (cut, sed, echo) et j'ajoute cette ligne dans un autre fichier... et ca prend du temps.
Le meme algo sous perl et je divise le temps par 10. j'ai testé ca aujourdui.

Reply

Sujets relatifs:

Leave a Replay

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