Update 20/05/2015: Ajout d'échappement. J'en avais besoin pour écrire du PHP.
Un petit script pour éditer les paramètres d'un fichier de config type INI.
Prends en paramètre une liste de fichiers sur lesquels appliquer la modification, la clé, la valeur et la section sur laquelle s'applique la clé.
Faite par votre serviteur.
# setIniKey files key value section
function setIniKey
{
key=$2
value=$3
section=$4
escapedKey=$(echo $key | sed -e 's/[]\/$*.^|[]/\\&/g')
escapedValue=$(echo $value | sed -e 's/[]\/$*.^|[]/\\&/g')
escapedSection=$(echo $section | sed -e 's/[]\/$*.^|[]/\\&/g')
for ini in $(ls $1 2>/dev/null); do
if ! grep -E "[#; ]*$escapedKey\s*=" $ini > /dev/null
# Key is not in file
then
if [ -z "$4" ]
then
# There is no section, add to the end of file
echo "$key = $value" >> $ini
else
if grep -E "\[$escapedSection\]" $ini > /dev/null
then
# If section is found, adds key = value just after the begining of the section
sed -i -e "/\[$escapedSection\]/a $escapedKey = $escapedValue" $ini
else
# If section not found, adds section, followed by key = value
echo -e "[$4]\n$key = $value" >> $ini
fi
fi
# Key is in file
else
sed -i -e "s/[#; ]*$escapedKey\s*=.*/$escapedKey = $escapedValue/g" $ini
fi
done
}