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.

24
demandé sur SomeGuyOnAComputer 2013-12-13 18:08:10

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
36
répondu anubhava 2013-12-13 14:10:28

, 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 correspondance THISISMYVARIABLE[ ]*= . ({[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.
4
répondu Kannan Ramamoorthy 2018-01-03 13:33:50

, 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
3
répondu devnull 2013-12-13 14:10:36
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)

1
répondu NeronLeVelu 2013-12-13 21:27:25

Essayez ce qui suit

Sed-r ' s / ^(VAR5=).* / \1REPLACEMENT/ '

La valeur de VAR5 sera remplacée par REPLACEMENT.

0
répondu Vlad.Bachurin 2013-12-13 14:13:01