IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Remplacer plusieurs chaines dans plusieurs fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut Remplacer plusieurs chaines dans plusieurs fichiers
    Bonjour,

    j'ai une liste de fichiers à transformer : il y a une liste de chaînes de caractères à remplacer dans tous les fichiers.
    Donc, j'ai un fichier de correspondance Correspondance.txt comme suit :

    Correspondance.txt
    --------------------
    chaine1---New_ch1
    chaine2---New_ch2
    chaine3---New_ch3

    Liste de fichiers où effectuer les changements :
    List=`ls *.dat`

    donc, je dois parcourir les fichiers, quand je trouve une chaine dans correspondance.txt, je la vire et je la remplace par la nouvelle.


    donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for file_name in List
    do
      while read line
      do
        old_string=`echo $line | awk '{ print $1 }'` 
        new_string=`echo $line | awk '{ print $2 }'`
        sed 's/$old_string/ $new_string /g' $file_name
      done < correspondance.txt 
    done

    Le problème est que mes fichiers ont une certain format que je dois respecter et que old_string et new_string n'ont pas nécessairement le même nombre de caractères, ce qui fait que je fais foutre en l'air e format de tous mes fichiers.
    Comment faire donc pour ne pas bousiller ce format? (par format je veux dire colonne 1 correspond à telle information, colonne 21 correspond à une autre information et que le fait de remplacer peut changer ces colonnes la)

    Ce qu'il faut faire c'est l'équivalent de "Insert" de windows, en virant les caractéres supplémentaires..

    qqn a une idée? Merci

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    continues a utiliser sed en precisant le nombre de caracteres \{3\} je crois comme syntaxe (de memoire)

    verifies la doc qd meme mais c'est le plus simple.

    sinon tu peux compter les caracteres en shell avant et completer ce qui manque si besoin par des espaces
    avant de faire le sed substitute

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut
    je viens de me rendre compte que cet algorithme parcourt le fichier à changer autant de fois que de lignes dans correspondance.txt

    ya pas plus optimal à votre avis?

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Par défaut
    et puis surtout :
    comment faire pour que ma recherche soit case insensitive!

    je n'arrive pas à concevoir une maniére simple de faire, car :
    si old_string = "john"
    il se peut que dans mon fichier, ma chaine soit "John" !! donc le simple fait de convertir tout en minuscules ou majiscules ne va pas résoudre le problème.

Discussions similaires

  1. remplacement de chaine dans un fichier
    Par vince2005 dans le forum Langage
    Réponses: 6
    Dernier message: 10/12/2013, 14h08
  2. Réponses: 0
    Dernier message: 08/02/2012, 17h52
  3. Chercher et remplacer une chaine dans un fichier texte C
    Par étoile de mer dans le forum Débuter
    Réponses: 6
    Dernier message: 14/11/2011, 11h59
  4. Réponses: 2
    Dernier message: 24/09/2006, 21h21
  5. [XSLT] remplacement de chaine dans un fichier XML
    Par Eldarion dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/07/2006, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo