Remplacement chaine de caractère

NBK59000 Messages postés 11 Statut Membre -  
NBK59000 Messages postés 11 Statut Membre -
Bonjour,

Bonjour, je dois faire un script UNIX qui me pose souci.
Le script doit :
1) Aller dans le repertoire /travail/YYYYMMDD-1 par rapport à la date système
soit /travail/20120201 si on est le 02/02/2012
2) Scrupter tous les fichiers d'extension xml des sous-repertoires et remplacer dans le fichier la premiere occurrence de
<NumCde>000000000 par <NumCde>

Merci d'avance pour votre aide, ca me dépannerait bien ...

4 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Quel système ?
    Quel shell ?
    Quelle version de "sed" ?
    La 1ère occurrence de chaque la ligne ou sur l'ensemble du fichier ?
    0
  2. NBK59000 Messages postés 11 Statut Membre
     
    La premiere occurence dans le fichier
    C'est sur un AIX 5.3
    Je ne connais pas la version de sed
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ok.

      Est-ce que 'date "+%Y%m%d"' renvoie bien le bon format sous ton AIX ?

      Que renvoie "sed --version" ?
      0
  3. NBK59000 Messages postés 11 Statut Membre
     
    date "+%Y%m%d
    renvoie
    20120201 -> OK

    et sed -V et sed --version ne fonctionnent pas ...

    sed: illegal option -- V
    Usage: sed [-n] [-u] Script [File ...]
    sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ok.

      Peux-tu tester cette commande "sed" sur un de tes fichiers et me dire si le remplacement de la 1ère occurrence est effectif à l'écran ?

      sed '0,/<NumCde>000000000/{s//<NumCde>/;}'
      0
    2. NBK59000 Messages postés 11 Statut Membre
       
      Non, ca ne marche pas ...
      Par contre, j'ai réussi en faisant :

      sed -e 's/<NumCde>000000000/<NumCde>/g' < my_fic.xml > temp.xml
      mais je suis obligé de passer par un fichier temporaire temp.xml
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Oui mais cette commande modifie toutes les occurrences et non pas seulement la première ;-\
      0
    4. NBK59000 Messages postés 11 Statut Membre
       
      meme en supprimant le/g ?
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Ben oui le "g" c'est pour substituer toutes les occurrences d'une même ligne.

      Essaie comme ça alors :

      sed -e '1,/<NumCde>000000000/{s/<NumCde>000000000/<NumCde>/;}'
      0
  4. NBK59000 Messages postés 11 Statut Membre
     
    ksh: syntax error: '<' unexpected

    :/

    Par contre, ca simplifierait les choses de prendre toutes les occurrences du fichier ?
    Au pire, je prends le risque ...
    Il faudrait un truc du genre ..;
    for fic in 'find . -name "*xml"'
    do
    sed -e 's/<NumCde>000000000/<NumCde>/g' < $fic > temp.xml
    mv temp.xml $fic
    done

    aux repertoires près ..
    mais le $fic n'est pas interpreté dans le sed ....
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Attends, on va d'abord essayer autre chose ;-))

      ed bidon.xml <<EOF
      /<NumCde>/ s/<NumCde>000000000/<NumCde>/
      .
      w
      EOF
      0
    2. NBK59000 Messages postés 11 Statut Membre
       
      Oui, ca ca marche :))
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Le problème maintenant c'est pour intégrer cette syntaxe avec "find" et son option "-exec" ;-((
      0
    4. NBK59000 Messages postés 11 Statut Membre
       
      moi je pensais à un truc du genre :
      for fic in 'find . -name "*.xml'
      do
      ed $fic <<EOF
      ...
      EOF
      done

      mais ca marche pô ...
      0
    5. NBK59000 Messages postés 11 Statut Membre
       
      Pour l'instant y'a que :

      sed -e 's/<NumCde>000000000/<NumCde>/1' < my_fic.xml > temp.xml

      qui fonctionne, mais impossible d'utiliser une variable pour remplacer my_fic.xml ...
      0