J’ai un script qui contient quelques variables. L’un d’eux est un chemin propriétaire MYPATH .
Je veux enregistrer la sortie de MYPATH puis remplacer une autre variable SOME_OTHER_PATH par la même valeur.
Entrée actuelle dans myfile.sh
MYPATH="/opt/local/custom/myfiles" SOME_OTHER_PATH=""
Sortie que je veux
MYPATH="/opt/local/custom/myfiles" SOME_OTHER_PATH="/opt/local/custom/myfiles"
Le script que j’ai écrit le fait
mylocalpath=`sed -n /^MYPATH/p' myfile.sh | sed -e 's/MYPATH/'` sed -i -e "s/^SOME_OTHER_PATH/${mylocalpath}" myfile.sh
Ici, nous avons deux problèmes
${mylocalpath}
contient “/”, sed essaie de les évaluer et génère une exception Je voudrais regrouper le script entier dans un fichier sed (au lieu de lancer sed deux fois) et l’exécuter comme
sed -f sed_file myfile.sh
Bien que je sois certain que cela soit possible avec sed, je vous recommande d’utiliser awk:
awk -F'"' '/^MYPATH=/ { path = $2 } /^SOME_OTHER_PATH=/ { $0 = $1 path "\"" } 1' file
Enregistrez le chemin d’access à une variable lorsque la ligne commence par MYPATH
et utilisez-la lorsque la ligne commence par SOME_OTHER_PATH
. Le 1
à la fin est la condition vraie la plus courte et { print }
est l’action par défaut, donc chaque ligne est imprimée.
Pour effectuer une édition “in-place”, utilisez simplement un fichier temporaire:
awk ... file > tmp && mv tmp file