Forum Programmation.shell Commandes pour Sed.

Posté par  .
Étiquettes : aucune
0
24
juil.
2007
Bonjour à vous.

Je viens de découvrir Sed grace à Cygwin, ( et oui honte à moi je suis sous windows... )

Je tente veinement d'utiliser Sed pour modifier un fichier texte, sans résultat, c'est pourquoi je lance un appel au secours auprés de vous !

Voila, mon Txt ressemble à cela :

#1#"05/04/2007"#"14:15"#"Test"#1#358#63
#1#"05/07/2007"#"17:30"#"Test2"#1#358#63
etc etc..

Donc je tente de faire en sorte que Sed me remplace les # par des & et supprime les "", et je n'y arrive pas ! :(

Est ce car je suis sous Windows ? Faut t'il que j'utilise d'autres commandes ?

J'aimerai simplement avoir mon txt de base, et un txt modifié ou ma chaine de caractéres serai comme ça :

&1&05/04/2007&14:15&Test&1&358&63
&1&05/04/2007&17:30&Test2&1&358&63

au secours ! :)

A l'avance merci!
  • # Tes tentatives ?

    Posté par  . Évalué à 1.

    Et si tu nous commençais par nous montrer ce que tu as déjà tenté de faire, on t'aiderait plus qu'en te donnant direct la solution...
    • [^] # Re: Tes tentatives ?

      Posté par  . Évalué à 1.

      J'avais tenté :
      sed 's/#/&/g
      pour le remplacement, puis ensuite avec /\#/\&/ puisque j'ai cru comprendre qu'il reconnaissait pas les caractéres...enfin bref j'ai vite déchanté ...
  • # Ptet ça...

    Posté par  (site web personnel) . Évalué à 2.

    Probablement pas la solution la plus optimale mais...

    $ cat file.txt
    #1#"05/04/2007"#"14:15"#"Test"#1#358#63
    #1#"05/07/2007"#"17:30"#"Test2"#1#358#63

    $ sed -i file.txt -e 's/#/\&/g' -e 's/"//g'

    $ cat file.txt
    &1&05/04/2007&14:15&Test&1&358&63
    &1&05/07/2007&17:30&Test2&1&358&63


    Dans tous les cas, mieux vaut bosser sur une copie de ton fichier avant d'utiliser "sed -i", ça évitera les mauvaises surprises :).
    • [^] # Re: Ptet ça...

      Posté par  . Évalué à 1.

      ou bien faire

      cat infile.txt | sed -e 's/#/\&/g' -e 's/"//g' >outfile.txt
      • [^] # Re: Ptet ça...

        Posté par  . Évalué à 1.

        Merci à vous, je dois être trop fatigué car je n'arrive à rrien, je retente demain et je vous tiens au courant, merci beaucoup pour vos réponses si rapides ! :)
    • [^] # Re: Ptet ça...

      Posté par  (site web personnel) . Évalué à 2.

      Pour éviter les mauvaises surprises, utiliser "sed -i.bak" qui créera un fichier backup avec l'extension .bak pour au cas où ...
  • # Youpi !

    Posté par  . Évalué à 1.

    J'ai réussis enfin ! ( n'oublions pas que je suis un novice :) )

    Je n'y arrivais pas tout simplement parce-que je ne mettais pas le nom de mon fichier au bon endroit ....

    sed -e 's/#/\&=/g' -e 's/"//g' fichier.txt>fichier2.txt

    Maintenant je vais tenter d'automatiser la tache en boucle toutes les x secondes, j'ai commencer a faire un script, sans succés évidemment :p

    #! /bin/bash
    cd c:\
    sed -e 's/#/\&=/g' -e 's/"//g' fichier.txt>fichier2.txt

    Bien sur rien ne se passe...
    Je suis hors piste ou je suis sur la bonne voie svp ?
    Merci pour votre aide.
    • [^] # Re: Youpi !

      Posté par  . Évalué à 1.

      Juste des petits détails pour aller encore plus vite (si jamais tes fichiers sont un peu volumineux ou s'ils sont montés par NFS):

      1) Pour remplacer un caractère par un autre tu peux utiliser la commande 'y' au lieu de 's'. Malheureusement, on ne peut pas utiliser 'y' pour éliminer un caractère comme on le ferait avec perl.

      2) Mieux vaut enchaîner les commandes sed avec un ';' plutôt que de donner plusieurs commandes. Ce n'est pas toujours vrai, mais dans ton cas ça l'est.

      3) Si ça ne t'intéresse pas de conserver la forme originale de ton fichier ,tu peux demander à sed d'effectuer ses remplacements directement dans ton fichier source avec l'option '-i'.

      En compilant ces trois remarques, ça donne:
      sed -i -e 'y/#/&/;s/"//g' toto

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.