Extractions avec sed et/ou autres outils

dp403aan Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous et à toutes,

j'ai un fichier de config qui se présente de la sorte :

[Software\BigFix\EnterpriseClient\Settings\Client\__RelayServer1]
effective date = Tue,%2024%20Apr%202008%2011:37:35%20+0200
value = http://10.244.254.34:52311/bfmirror/downloads

[Software\BigFix\EnterpriseClient\Settings\Client\__Client_Role_090024]
value = 0

[Software\BigFix\EnterpriseClient\Settings\Client\__RelaySelect_Automatic]
value = 0
effective date = Mon,%2006%20Jun%202006%2015:05:03%20+0200

je souhaiterais récupérer proprement les valeurs 10.244.254.34 et 0 comme indiquées, afin de pouvoir les remplacer dans un second temps.
J
'y arrive un peu en "bricolant" avec sed en le faisant via un début script à travers des variables,

mais ce n'est pas terrible, peut-être devrais-je utiliser d'autres outils sinon ? :

#!/bin/bash

# Variables

OPT=/var/opt/BESClient
CONF=/var/opt/BESClient/besclient.config

# Fonctions

changer_relai1()
{
 echo -e "Valeur actuelle du RelayServer1 :\n" $(echo $(sed -n '/__RelayServer1/{n;n;p}' ${CONF}))
 read -p "Saisir la nouvelle valeur du RelayServer1 : " RELAI
 sed -i 's#//.*:#//'${RELAI}':#' ${CONF}     # bricolage
 echo -e "Nouvelle valeur du RelayServer1 :\n" $(echo $(sed -n '/__RelayServer1/{n;n;p}' ${CONF}))
}

changer_select()
{
 CHECK=$(sed -n '/__RelaySelect_Automatic/{n;p}' ${CONF} | awk '{print $3}')
 echo -e "\nValeur actuelle du RelaySelect_Automatic :\n" $(echo $(sed -n '/__RelaySelect_Automatic/{n;p}' ${CONF} | awk '{print $3}'))
 read -p "Saisir la nouvelle valeur du RelaySelect_Automatic : " AUTO
 sed -i 's/'${CHECK}'/'${AUTO}'/' ${CONF}
 echo -e "Nouvelle valeur du RelaySelect_Automatic :\n" $(echo $(sed -n '/__RelaySelect_Automatic/{n;p}' ${CONF}))
}


en vous remerciant par avance pour votre aide,

++
Cordialement,
dp403aan

A voir également:

2 réponses

Utilisateur anonyme
 
salut,

« ce n'est pas terrible »
qu'est-ce qui te choque ?
si ça fait ce que tu veux, à part les
echo
qui paraissent inutiles, et piper sed vers awk :(
...
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
quel est le critère pour extraire le 2ème value= après 10.244.254.34 et pas le 1er ?
0
dp403aan
 
Bonjour,

ce fichier de configuration est composé de plusieurs petits blocs de 2-3 lignes,
en fait la ligne [Software\BigFix\EnterpriseClient\Settings\Client\__Client_Role_090024]
value = 0, n'a pas d'importance.

Pour la ligne contenant [Software\BigFix\EnterpriseClient\Settings\Client\__RelayServer1],
je souhaiterai matcher exactement ce qu'il y a entre value = http:// et :52311/bfmirror/downloads, à savoir "10.244.254.34", car selon les différentes machines, il peut y avoir comme valeur quelque chose comme "s00v09912345.apps.tech.net.infra".

Dans un second temps, concernant la ligne [Software\BigFix\EnterpriseClient\Settings\Client\__RelaySelect_Automatic], j'ai besoin de récupérer le 0 de la ligne value = 0

Cordialement,
dp403aan
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
$ s="[Software.BigFix.EnterpriseClient.Settings.Client"
$ read ip val <<<$(awk -v s="$s" -F "[ :]|//" 's && /RelayServer1]$/ {n=5} s && /RelaySelect_Automatic]$/ {n=3} /value/ && n {print $n; n=0}' fichier)
$ echo $ip
10.244.254.34
$ echo $val
0
0