Comment utiliser sed pour remplacer la variable d'un fichier de configuration?
J'ai cherché en ligne cette réponse et je n'arrive pas à la trouver.
J'ai un fichier de configuration qui contient:
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6
Et je veux changer la valeur de VAR5 de VALUE5 à VALUE10. Malheureusement, je ne connais pas la valeur de VALUE5 donc je ne peux pas la rechercher. Donc, fondamentalement, je dois utiliser sed (ou autre) pour remplacer la valeur de VAR5 à la valeur avec laquelle je veux la remplacer.
5 réponses
Vous pouvez essayer ce sed:
sed -i.bak 's/^\(VAR5=\).*/\1VALUE10/' file
Il donne:
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
, Même si la réponse a été ajoutée à la question. J'ai passé du temps sur la façon dont cela fonctionne, je voudrais ajouter quelques faits et ma version de la réponse,
sed -i 's,^\(THISISMYVARIABLE[ ]*=\).*,\1'THISISMYVALUE',g' config.cfg
Explication:
- Comme base de
sed 's/find_this/replace_with/'
, nous disant sed pour rechercher et remplacer. Rappelez-vous également qu'il existe plusieurs autres délimiteurs que nous pouvons utiliser à la place de/
. Ici,
est utilisé. - Ici, nous trouvons la ligne qui correspond à
^\(THISISMYVARIABLE[ ]*=\).*
. Cela signifie que nous regroupons la correspondanceTHISISMYVARIABLE[ ]*=
. ({[6] } pour couvrir s'il y a des espaces après la clé) - dans la section remplacer
\1
est une référence arrière. Nous référençons le premier groupe dans l'expression régulière que nous avons utilisée pour match.
, Vous pouvez dire:
sed '/^VAR5=/s/=.*/=VALUE10/' filename
Pour effectuer la modification du fichier en place , utilisez l'option -i
:
sed -i '/^VAR5=/s/=.*/=VALUE10/' filename
sed '/\(^VAR5=\).*/ s//\1VALUE10/' YourFile
Sous AIX / KSH
$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE5
VAR6=VALUE6
$ sed '/\(^VAR5=\).*/ s//\1VALUE10/' sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
Et pour le remplacement dans le fichier
cat <> YourFile | sed '/\(^VAR5=\).*/ s//\1VALUE10/'
$ cat <> sample.txt | sed '/\(^VAR5=\).*/ s//\1VALUE10/'
$ cat sample.txt
VAR1=VALUE1
VAR2=VALUE2
VAR3=VALUE3
VAR4=VALUE4
VAR5=VALUE10
VAR6=VALUE6
Être POSIX (sur la partie sed
, non conforme à cat
) (sed --posix
sur gnu sed et sed nativement traditionnel sur un système non linux)
Essayez ce qui suit
Sed-r ' s / ^(VAR5=).* / \1REPLACEMENT/ '
La valeur de VAR5 sera remplacée par REPLACEMENT.