Script shell - read file, locate lines, replace part of line
james
-
Teddy -
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.
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:
- Script shell - read file, locate lines, replace part of line
- Classic shell - Télécharger - Personnalisation
- .Dat file - Guide
- .Bin file - Guide
- Host file - Guide
- Script vidéo youtube - Guide
2 réponses
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
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!!!
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!!!
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.
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.
$ 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