Script shell - read file, locate lines, replace part of line

james -  
 Teddy -
Bonjour,

je souhaite dans un script shell, lire dans un fichier précis. dans ce dernier, trouver toutes les lignes qui commencent par "-FILEMAP=" et remplacer le path par un autre.

exemple:
-FILEMAP=DD:RR,/home/nine/test/inputs/file.txt
par
-FILEMAP=DD:RR,/opt/sha/test232323431/file.txt

le problème c'est les valeurs de "DD:RR" et "file.txt" peuvent être variant.
la seule partie fixe est -FILEMAP=

j'ai regardé par sed ou awk mais comme j'ai des parties variantes, je ne vois pas comment faire.
sed -i "s%$oldpath%$newDirectory%g" $"control.opt"

merci pour vos conseils.

2 réponses

  1. Utilisateur anonyme
     
    salut,

    il y a une partie fixe :
    la virgule, et
    le dernier slash (avant le nom du fichier).
    0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    $ cat fich 
    exemple:
    -FILEMAP=DD:RR,/home/nine/test/inputs/monfich.txt
    par
    -FILEMAP=PP:QQ,/opt/sha/test232323431/file.txt

    $ sed -r '/^-FILEMAP=/{s#(=[^,]*,).*/(.*)#\1/nouvelleURL/\2#}' fich
    exemple:
    -FILEMAP=DD:RR,/nouvelleURL/monfich.txt
    par
    -FILEMAP=PP:QQ,/nouvelleURL/file.txt

    0
    1. james
       
      merci beaucoup zipe31 pour ton aide.
      je t'avoue je n'aurais jamais trouvé tout seul..
      je ne comprends pas le patern mais ça marche nikel.

      il faut que j'arrive a supprimer le slash "/" du début de ma variable qui est obtenue par pwd. je stock le résultat dans la variable : $nouvelleURL, et en passant le sed, j'obtiens 2 slash //
      exemple:
      -FILEMAP=DD:RR,//nouvelleURL/monfich.txt


      merci encore!!!
      0
    2. james
       
      c bon j'ai mon résultat :)
      merci
      0
    3. Teddy
       
      Zipe31,

      j'ai un autre cas à te soumettre : j'ai une ligne où je n'ai que le chemin et pas de fin
      exemple:

      -IMPORTDIRECTORY=/home/nine/test/

      j'ai utilisé le meme ligne indiquée par tes soins.
      étant donné que le patern prend en compte le fichier à la fin, et que dans cette ligne il n y a pas de fin, il ne me remplace pas le path.

      peux-tu stp m'aider à résoudre ce denier soucis?
      par avance merci.
      0
    4. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501 > Teddy
       
      $ cat fich 
      exemple:
      -FILEMAP=DD:RR,/home/nine/test/inputs/monfich.txt
      par
      -FILEMAP=PP:QQ,/opt/sha/test232323431/file.txt

      -IMPORTDIRECTORY=/home/nine/test/

      $ sed -r '/-FILEMAP=/{s#(=[^,]*,).*/(.*)#\1/nouvelleURL/\2#};/^-IMPORTDIRECTORY=/{s#=.*#/=nouvelleURL#}' fich
      exemple:
      -FILEMAP=DD:RR,/nouvelleURL/monfich.txt
      par
      -FILEMAP=PP:QQ,/nouvelleURL/file.txt

      -IMPORTDIRECTORY/=nouvelleUR
      0
    5. Teddy
       
      hello zip31,

      merci pour ton retour.
      j'ai essayé la ligne et voici le résultat:

      -IMPORTDIRECTORY/=/home/nine/test

      il m'ajoute un slash juste aprés le IMPORTDIRECTORY et ne m'ajoute pas de slash à la fin. si tu peux stp m'aider à obtenir :
      -IMPORTDIRECTORY=/home/nine/test/

      thanks
      0