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

Fermé
james - 18 juin 2016 à 16:06
 Teddy - 21 juin 2016 à 11:06
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.
A voir également:

2 réponses

Utilisateur anonyme
18 juin 2016 à 16:27
salut,

il y a une partie fixe :
la virgule, et
le dernier slash (avant le nom du fichier).
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
18 juin 2016 à 17:03
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
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
c bon j'ai mon résultat :)
merci
0
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407 > Teddy
19 juin 2016 à 17:10
$ 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
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