sed: Enregistrer la sortie et remplacer

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

  1. Puisque ${mylocalpath} contient “/”, sed essaie de les évaluer et génère une exception
  2. 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