GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser sed pour modifier mes fichiers de configuration, avec des clés et des valeurs flexibles ?

sed -i -e '/central\.database =/ s/= .*/= new_value/' /path/to/file

Explication :

  • -i indique à sed d'enregistrer les résultats dans le fichier d'entrée. Sans cela, sed imprimera les résultats sur stdout.
  • /central\.database =/ correspond aux lignes contenant la chaîne entre barres obliques :central.database = . Le . est échappé puisqu'il s'agit d'un caractère spécial dans regex.
  • Le s/OLD/NEW/ la pièce effectue un s substitution. La chaîne OLD est une expression régulière à faire correspondre et le NEW part est la chaîne à remplacer.
  • Dans les expressions régulières, .* signifie "correspondre à n'importe quoi". Alors = .* correspond à un signe égal, à un espace, puis à n'importe quoi d'autre après.

Voici un exemple d'expression :

sed -i 's/^\(central\.database\s*=\s*\).*$/\1SQLTEST/' file.cfg

Si vous voulez faire correspondre des choses avec / dedans, vous pouvez utiliser un autre délimiteur :

sed -i 's#^\(cent/ral\.data/base\s*=\s*\).*$#\1SQL/TEST#' file.cfg

Ou à expansion variable :

VAL="SQLTEST"
sed -i "s/^\(central\.database\s*=\s*\).*\$/\1$VAL/" file.cfg

Dans votre exemple :

sshRetValue=`sed -i "s/^\(\1$CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt`;

Il y a un \1 avant $CENTRAL_DB_NAME qui n'est pas valide. De plus, sed n'imprime pas sa valeur de retour. Il s'agit de la méthode préférée pour vérifier les valeurs de retour :

sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
sed_return_value=$?

Et finalement rediriger vers ssh (non testé) :

sed_return_value=$(ssh server <<EOF
    sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
    echo $?
EOF
)

Le -i sert à remplacer les données dans le fichier d'entrée. Sinon, sed écrit sur stdout.

Les expressions régulières sont un domaine à part entière. Il serait impossible de les expliquer en profondeur dans une réponse stackoverflow, à moins qu'il y ait une fonction spécifique qui vous échappe.


Linux
  1. Comment trouver les fichiers de configuration MySQL, PHP et Apache

  2. Comment trouver des fichiers avec des autorisations SUID et SGID sous Linux

  3. Comment utiliser la commande Sed sous Linux avec des exemples

  4. Comment compresser des fichiers et des répertoires sous Linux (avec exemples)

  5. Comment trouver des fichiers volumineux Linux avec les commandes find et du

Comment utiliser la commande cp pour copier des fichiers et des répertoires

Comment utiliser la commande Linux gunzip avec des exemples

Comment utiliser la commande SED pour rechercher et remplacer une chaîne dans des fichiers

Comment installer et utiliser Alpine avec Gmail IMAP sous Linux

Schémas de couleurs dans Vim :comment les modifier et les utiliser

Comment utiliser Sed pour rechercher et remplacer une chaîne dans un fichier