passer le résultat d’une commande à SED

Je veux faire ce qui suit, obtenir l’IP hôte de mon serveur, puis utiliser cette valeur pour substituer une valeur factice dans un fichier de configuration.

Pour l’étape 1, obtenez l’adresse IP du serveur que j’appelle:

hostname -I | head -n1 | awk '{print $1;}' 

Pour l’étape 2, remplacer la valeur factice dans le fichier que je ferais:

 sed -i 's/dummyvalue/valuefromprevioushostnamecommand/g' filename. 

L’idée est de combiner ces étapes en une commande Unix sans utiliser de script shell.

Toute aide à cet égard serait grandement appréciée Rob

Vous y êtes presque – placez simplement les deux commandes l’une dans l’autre:

 sed -is/'dummyvalue'/$(hostname -I | head -n1 | awk '{print $1;}')/g filename 

Notez que vous devez supprimer les guillemets simples entourant le s///g et les placer autour de la valeur dummyvalue . Sinon, bash n’essaiera pas d’interpréter la commande interne.

Vous n’avez pas besoin d’une chaîne de commandes de canalisation lorsque vous utilisez awk. Faites-le simplement dans une commande awk. Vous n’avez pas montré d’entrée d’échantillon ni de résultat attendu, cela n’a donc pas été testé, mais sera proche de ce dont vous avez besoin si ce n’est pas exactement:

 hostname -I | awk -i inplace 'NR==FNR{if (FNR==1) val=$1; nextfile} {gsub(/dummyvalue/,val)} 1' - filename 

Ce qui précède utilise gawk 4. * pour -i inplace et nextfile , avec d’autres awks, juste faire:

 hostname -I | awk 'NR==FNR{if (FNR==1) val=$1; next} {gsub(/dummyvalue/,val)} 1' - filename > tmp && mv tmp filename