Ce fil de discussion n'a pas assez de solutions à choisir, donc voici ma solution, elle ne nécessite pas d'outils tels que sed
o awk
:
grep '^\[section\]' -A 999 config.ini | tail -n +2 | grep -B 999 '^\[' | head -n -1 | grep '^key' | cut -d '=' -f 2
Si vous devez prévoir des sections de plus de 999 lignes, n'hésitez pas à adapter l'exemple ci-dessus. Notez que vous voudrez peut-être couper la valeur résultante, pour supprimer les espaces ou une chaîne de commentaires après la valeur. Supprimez le ^
si vous devez faire correspondre des clés qui ne commencent pas au début de la ligne, comme dans l'exemple de la question. Dans ce cas, il est préférable de rechercher explicitement les espaces blancs et les tabulations.
Si vous avez plusieurs valeurs dans une section donnée que vous voulez lire, mais que vous voulez éviter de lire le fichier plusieurs fois :
CONFIG_SECTION=$(grep '^\[section\]' -A 999 config.ini | tail -n +2 | grep -B 999 '^\[' | head -n -1)
KEY1=$(echo ${CONFIG_SECTION} | tr ' ' '\n' | grep key1 | cut -d '=' -f 2)
echo "KEY1=${KEY1}"
KEY2=$(echo ${CONFIG_SECTION} | tr ' ' '\n' | grep key2 | cut -d '=' -f 2)
echo "KEY2=${KEY2}"
6 votes
Est-ce que l'une de ces réponses respecte les sections ?
0 votes
Notez que tout script qui commence par
#!/bin/sh
est un script POSIX sh, et non un script bash. C'est une distinction importante, carsh
ne dispose pas de fonctionnalités comme les tableaux et les cartes (que bash appelle "tableaux associatifs") qui sont très utiles pour construire ce genre de choses.