yq/mkdocs/write.md
kenjones c5f80a105d Feature: Add append to array
Adds the ability to append a value to an array instead of having to
know the index of the values within the array.

Resolves: #17
2017-09-23 20:21:16 -04:00

1.7 KiB

yaml w <yaml_file|json_file> <path> <new value>

{!snippets/works_with_json.md!}

To Stdout

Given a sample.yaml file of:

b:
  c: 2

then

yaml w sample.yaml b.c cat

will output:

b:
  c: cat

From STDIN

cat sample.yaml | yaml 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

yaml w sample.yaml b.d[0] "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

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

will output:

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

Updating files in-place

Given a sample.yaml file of:

b:
  c: 2

then

yaml w -i sample.yaml b.c cat

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

Updating multiple values with a script

Given a sample.yaml file of:

b:
  c: 2
  e:
    - name: Billy Bob

and a script update_instructions.yaml of:

b.c: 3
b.e[0].name: Howdy Partner

then

yaml w -s update_instructions.yaml sample.yaml

will output:

b:
  c: 3
  e:
    - name: Howdy Partner

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

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

Values starting with a hyphen (or dash)

The flag terminator needs to be used to stop the app from attempting to parse the subsequent arguments as flags:

yaml w -- my.path -3

will output

my:
  path: -3