yq/pkg/yqlib/doc/Recursive Descent Operator.md
2020-11-18 09:50:52 +11:00

1.6 KiB

This operator recursively matches all children nodes given of a particular element, including that node itself. This is most often used to apply a filter recursively against all matches, for instance to set the style of all nodes in a yaml doc:

yq eval '.. style = "flow"' file.yaml

Examples

Matches single scalar value

Given a sample.yml file of:

cat

then

yq eval '..' sample.yml

will output

cat

Map

Given a sample.yml file of:

a:
  b: apple

then

yq eval '..' sample.yml

will output

a:
  b: apple
b: apple
apple

Array

Given a sample.yml file of:

- 1
- 2
- 3

then

yq eval '..' sample.yml

will output

- 1
- 2
- 3
1
2
3

Array of maps

Given a sample.yml file of:

- a: cat
- 2
- true

then

yq eval '..' sample.yml

will output

- a: cat
- 2
- true
a: cat
cat
2
true

Aliases are not traversed

Given a sample.yml file of:

a: &cat
  c: frog
b: *cat

then

yq eval '..' sample.yml

will output

a: &cat
  c: frog
b: *cat
&cat
c: frog
frog
*cat

Merge docs are not traversed

Given a sample.yml file of:

foo: &foo
  a: foo_a
  thing: foo_thing
  c: foo_c
bar: &bar
  b: bar_b
  thing: bar_thing
  c: bar_c
foobarList:
  b: foobarList_b
  !!merge <<:
    - *foo
    - *bar
  c: foobarList_c
foobar:
  c: foobar_c
  !!merge <<: *foo
  thing: foobar_thing

then

yq eval '.foobar | ..' sample.yml

will output

c: foobar_c
!!merge <<: *foo
thing: foobar_thing
foobar_c
*foo
foobar_thing