J'ai un fichier.
$ cat file
"bar": false
"foo": false
Je dois remplacer le mot false
par true
uniquement dans le motif "foo": false
. Le problème est des guillemets et des espaces.
J'ai pensé à deux manières:
Un exemple d'essais de l'option 2:
$ sed -i 's/\(.*foo\)/false/true\1/g' file
Ça a échoué.
Utilisez une adresse. Les guillemets ne posent pas de problème si vous ne faites que citer votre expression sed
$ sed '/"foo"/ s/false/true/' file
"bar": false
"foo": true
Si vous avez vraiment besoin de faire correspondre tout le motif, très bien:
$ sed '/"foo": *false/ s/false/true/' file
"bar": false
"foo": true
*
correspond à un nombre quelconque du caractère précédent (espace).
Vous pouvez utiliser \s
pour faire également correspondre les tabulations (tous les espaces horizontaux):
sed '/"foo":\s*false/ s/false/true/' file
Ajoutez l'option -i
après le test de modification du fichier d'origine.