J'ai cherché cette réponse en ligne 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, je ne peux donc pas la rechercher. Donc, fondamentalement, je dois utiliser sed (ou autre) pour remplacer la valeur de VAR5 par la valeur avec laquelle je veux le remplacer.
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é un peu de temps sur son fonctionnement, j'aimerais ajouter quelques faits et ma version de la réponse,
sed -i 's,^\(THISISMYVARIABLE[ ]*=\).*,\1'THISISMYVALUE',g' config.cfg
Explication:
sed 's/find_this/replace_with/'
, Nous disons que sed doit être recherché et remplacé. N'oubliez pas qu'il existe plusieurs autres délimiteurs que nous pouvons utiliser au lieu de /
. Ici, ,
Est utilisé.^\(THISISMYVARIABLE[ ]*=\).*
. Cela signifie que nous regroupons la correspondance THISISMYVARIABLE[ ]*=
. ([ ]*
Pour couvrir s'il y a des espaces après la clé)\1
Est une référence arrière. Nous référençons le premier groupe de l'expression régulière que nous avons utilisée pour la correspondance.Tu peux dire:
sed '/^VAR5=/s/=.*/=VALUE10/' filename
Pour effectuer la modification du fichier en place, utilisez le -i
option:
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 dossier
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
Pour être conforme à POSIX (sur sed
, et non cat
) (sed --posix
sur gnu sed et nativement traditionnel sed sur système non linux)
Essayez ce qui suit
sed -r 's/^ (VAR5 =). */\ 1REPLACEMENT /'
La valeur de VAR5 sera remplacée par REMPLACEMENT.