Remplacement chaine de caractere

repie Messages postés 6 Date d'inscription   Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
je cherche une commande pour rechercher puis remplacer une chaine de caractere dans un fichier.
J'ai deja un peu essayé sed mais si j'ai bien compris ça ne modifie pas directement le fichier.
Ed a l'air de le faire mais je n'ai pas réussi à l'utiliser.
De plus j'aurais besoin de quelques 'subtilitées'.
- Par exemple j'aimerais pouvoir remplacer toute chaine de la forme 'cible****' par 'cible = 2'
ceci afin d'écraser la valeur attirbuée et 'cible' ne servant qu'à repérer la variable.
- Et aussi rajouter un filtre sur le nom de fichier à modifier.

Voilou, grand merci d'avance !

14 réponses

  1. ShaBoo Messages postés 406 Statut Membre 50
     
    Bonjour,

    Tu peux essayer avec la commande awk. (pour plus de renseignement voir GoOgle).
    0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    sed  '/cible\*\{4\}/ s/cible\*\{4\}/cible = 2/' fichier
    Rajoute l'option "-i" pour une modification du fichier original :
    sed -i.bak '/cible\*\{4\}/ s/cible\*\{4\}/cible = 2/' fichier'
    ;-))
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    J'ai deja un peu essayé sed mais si j'ai bien compris ça ne modifie pas directement le fichier.
    Non, tu n'as pas bien compris :-)

    Il faut utiliser l'option -i ou -i.extension (pour sauvegarder l'original - au lieu d'extension tu peux utiliser n'importe quel suffixe, ex : bak, save, orig, etc.....)
    0
  4. repie Messages postés 6 Date d'inscription   Statut Membre
     
    merci pour ces réponses, je crois que c'est l'esprit de ce que je cherche.
    Malheureusement je n'ai pas réussi à l'appliquer.
    D'une part l'option -i n'est pas reconnue dans mon environnement :/
    D'autre part si je fais :
    fichier1 contient : cible = 8
    sed '/cible\*\{4\}/ s/cible\*\{4\}/cible = 2/' fichier1 < fichier2
    fichier2 reste identique à fichier1 (et il ne bronche pas quand j execute la commande).
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. repie Messages postés 6 Date d'inscription   Statut Membre
     
    Ah j'ai réussi je crois bien :

    cat fichier1 | sed 's/cible..../cible = 2/g' > fichier2

    Apres je crois que je suis condamné à faire un \mv :/
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Quelle version de sed ?

    D'autre part l'exemple que je t'ai donné était pour un motif correspondant à "cible****", dans ton cas particulier il faut simplement mettre :
    sed 's/cible = 8/cible = 2/' fichier1 > fichier2
    ;-))
    0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    T'es obligé de le faire avec sed?
    Sinon il y a aussi Perl
    perl -pi.orig -e 's/cible[*]{4}/cible = 2/g' fichier
    --
    lami20j
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Non il n'est pas obligé... y'a "ed" aussi ;-)))

      Perl c'est pour les faignants ;-DDD

      Edit : Tiens faignasse, va voir !
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        0
  9. repie Messages postés 6 Date d'inscription   Statut Membre
     
    L'idée c'est d'écraser la valeur de cible. Ce qui fait office de 'n'importe quel caractere' c'est '.' (par défaut j'ai mis *, désolé pour l'ambigüité)

    Pour la version de sed je sais pas.
    0
  10. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    sed --version
    ;-))
    0
  11. repie Messages postés 6 Date d'inscription   Statut Membre
     
    La commande marche pas :/ désolé
    0
  12. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    sed -v

    0
  13. repie Messages postés 6 Date d'inscription   Statut Membre
     
    non plus : illegal option
    décidément ..
    0
  14. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Affiche
    sed -h
    ou
    sed --help
    quelque soit le résultat--
    lami20j
    0
  15. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    sed
    tout court alors et t'auras droit à toutes les options ;-))
    0