Je veux grep le numéro de version dans un fichier et le remplacer dans un autre fichier. Je veux grep 4.3.0.5 dans le fichier 1 et le remplacer dans le fichier 2 à la version 4.3.0.2. J’ai la commande ci-dessous pour obtenir le numéro, mais comment puis-je le couper / remplacer dans le deuxième fichier?
Fichier1:
App: 4.3.0.5 (ou) App: 4.3.0.5-SNAPSHOT
Fichier2: Avant de modifier
grid_application_dissortingbution_url = nexus : //com.abcd.efge.ce/App/ 4.3.0.2 /tar.gz/config
Fichier 2 : après édition ( résultat souhaité:)
Si $ VERISON dans le fichier est SANS le mot SNAPSHOT alors dans le fichier 2
grid_application_dissortingbution_url = nexus : //com.abcd.efge.ce/App/ 4.3.0.5 /tar.gz/config
Si $ VERSION a SNAPSHOT, alors la ligne dans le fichier 2 devrait être
grid_application_dissortingbution_url = nexus-snapshot : //com.abcd.efge.ce/App/ 4.3.0.5 /tar.gz/config
VER=$(awk -F: '/^App/{sub(/ .*$/, "", $2); print $2}'/path/file1.txt) echo $VER if ($vER ~ /SNAPSHOT/) /usr/bin/ssh -t -t server2.com "sub("=nexus:", ":=nexus-snapshot") /path/file2" && sub(/[^\/]+\/tar\.gz/, $VER"/tar.gz") /path/file2
Ce script awk peut faire le travail (ceci est une amélioration de la réponse ci-dessus de @EDMorton):
Fractionnement de la commande en 2 selon la requête de l’OP
VER=$(awk -F' *: *' '/^App/{print $2}' file1) awk -vv="$VER" '{ split(v, arr, "-"); sub(/[^\/]+\/tar\.gz/, arr[1]"/tar.gz"); if (arr[2] ~ /SNAPSHOT/) sub("=nexus:", ":=nexus-snapshot") }1' file2 > tmpFile mv tmpFile > file2
Quelque chose comme ça est tout ce dont vous avez besoin:
awk -F': +' 'NR==FNR{v=$2;next} {sub(/[^/]+\/tar.gz/,v"/tar.gz")} 1' File1 File2 > tmp && mv tmp File2
Vous pouvez essayer avec ceci:
VERSION=($(grep -r "App:" /path/File1| awk '{print ($2)}')) sed -i "s/4.3.0.2/$VERSION/" File2
il cherchera “4.3.0.2” et changera par valeur dans $VERSION
. File2 sera mis à jour avec ce changement.
Si vous souhaitez que le fichier rest identique, supprimez le drapeau -i
:
sed "s/4.3.0.2/$VERSION/" File2
Vous obtiendrez le résultat dans stdout.
Comme indiqué dans les commentaires, 4.3.0.2
n’est pas comme ça à chaque fois. Adapté pour le format XYZW
:
sed "s/\/[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]\(\/tar.gz\)/\/$VERSION\1/" File2