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

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. salut,

    il y a une partie fixe :
    la virgule, et
    le dernier slash (avant le nom du fichier).
    1. Contributeur
      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

      1. 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!!!
      2. c bon j'ai mon résultat :)
        merci
      3. 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.
      4. Contributeur
        @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
      5. 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