Sed : Remplacer un \ par \\ dans un path [Shell] - Shell/Batch - Programmation
Marsh Posté le 23-04-2008 à 11:51:14
$ cat fichier.txt |
Marsh Posté le 23-04-2008 à 12:01:57
chaica a écrit :
|
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 !
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.
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.
Marsh Posté le 23-04-2008 à 16:04:12
Merci bien. C'est donc décidé... GOTO Perl !
Merci pour tout.
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.
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.
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.