2017-04-13 05:36:59 +00:00
```
2017-04-19 05:45:45 +00:00
yaml w < yaml_file | json_file > < path > < new value >
2017-04-13 05:36:59 +00:00
```
2017-04-19 05:45:45 +00:00
{!snippets/works_with_json.md!}
2017-04-13 05:36:59 +00:00
### To Stdout
Given a sample.yaml file of:
```yaml
b:
c: 2
```
then
```bash
yaml w sample.yaml b.c cat
```
will output:
```yaml
b:
c: cat
```
### From STDIN
```bash
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:
```yaml
b:
c: 2
```
then
```bash
yaml w sample.yaml b.d[0] "new thing"
```
will output:
```yaml
b:
c: cat
d:
- new thing
```
### Updating files in-place
Given a sample.yaml file of:
```yaml
b:
c: 2
```
then
```bash
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:
```yaml
b:
c: 2
e:
- name: Billy Bob
```
and a script update_instructions.yaml of:
```yaml
b.c: 3
b.e[0].name: Howdy Partner
```
then
```bash
yaml w -s update_instructions.yaml sample.yaml
```
will output:
```yaml
b:
c: 3
e:
- name: Howdy Partner
```
And, of course, you can pipe the instructions in using '-':
```bash
cat update_instructions.yaml | yaml w -s - sample.yaml
2017-05-02 22:11:26 +00:00
```
### Values starting with a hyphen (or dash)
This needs a bit of trickery so that it won't try to parse the value as a CLI option. Specifically you will need to wrap the value with a single and double quotes:
```
yaml w my.path '"-Dvalue"'
```
will output
```yaml
my:
path: -Dvalue
```