Write

Updates all the matching nodes of path expression in a yaml file to the supplied value.
yq w <yaml_file> <path_expression> <new value>

See docs for path expression and value parsing for more details, including controlling quotes and tags.

Basic

Given a sample.yaml file of:

b:
c: 2

then

yq w sample.yaml b.c cat

will output:

b:
c: cat

Updating files in-place

yq w -i sample.yaml b.c cat

will update the sample.yaml file so that the value of 'c' is cat.

From STDIN

cat sample.yaml | yq w - b.c blah

Adding new fields

Any missing fields in the path will be created on the fly.

Given a sample.yaml file of:

b:
c: 2

then

yq w sample.yaml b.d[+] "new thing"

will output:

b:
c: cat
d:
- new thing

Appending value to an array field

Given a sample.yaml file of:

b:
c: 2
d:
- new thing
- foo thing

then

yq w sample.yaml "b.d[+]" "bar thing"

will output:

b:
c: cat
d:
- new thing
- foo thing
- bar thing

Note that the path is in quotes to avoid the square brackets being interpreted by your shell.

Multiple Documents

Update a single document

Given a sample.yaml file of:

something: else
---
b:
c: 2

then

yq w -d1 sample.yaml b.c 5

will output:

something: else
---
b:
c: 5

Update all documents

Given a sample.yaml file of:

something: else
---
b:
c: 2

then

yq w -d'*' sample.yaml b.c 5

will output:

something: else
b:
c: 5
---
b:
c: 5

Updating only styles/tags without affecting values

You can use the write command to update the quoting style of nodes, or their tags, without re-specifying the values. This is done by omitting the value argument:

Given a sample document:

a:
c: things
d: other things

Then

yq write sample.yaml --style=single a.*

Will yield:

a:
c: 'things'
d: 'other things'

Using a script file to update

Given a sample.yaml file of:

b:
d: be gone
c: 2
e:
- name: Billy Bob # comment over here

and a script update_instructions.yaml of:

- command: update
path: b.c
value:
#great
things: frog # wow!
- command: delete
path: b.d

then

yq w -s update_instructions.yaml sample.yaml

will output:

b:
c:
#great
things: frog # wow!
e:
- name: Billy Bob # comment over here

And, of course, you can pipe the instructions in using '-':

cat update_instructions.yaml | yq w -s - sample.yaml