Path Expressions
Path expressions are used to deeply navigate and match particular yaml nodes.
As a general rule, you should wrap paths in quotes to prevent your CLI from processing *, [] and other special characters.
Simple expressions
Maps
'a.b.c'
a:
b:
c: thing # MATCHESArrays
'a.b[1].c'
a:
b:
- c: thing0
- c: thing1 # MATCHES
- c: thing2Appending to arrays
(e.g. when using the write command)
'a.b[+].c'
a:
b:
- c: thing0Will add a new entry:
a:
b:
- c: thing0
- c: thing1 # NEW entry from [+] on B array.Negative Array indexes
Negative array indexes can be used to traverse the array in reverse
'a.b[-1].c'
Will access the last element in the b array and yield:
thing2Splat
Maps
'a.*.c'
a:
b1:
c: thing # MATCHES
d: whatever
b2:
c: thing # MATCHES
f: something irrelevantPrefix splat
'bob.item*.cats'
bob:
item:
cats: bananas # MATCHES
something:
cats: lemons
itemThing:
cats: more bananas # MATCHES
item2:
cats: apples # MATCHES
thing:
cats: orangesArrays
'a.b[*].c'
a:
b:
- c: thing0 # MATCHES
d: what..ever
- c: thing1 # MATCHES
d: blarh
- c: thing2 # MATCHES
f: thingamabobDeep Splat
** will match arbitrary nodes for both maps and arrays:
'a.**.c'
a:
b1:
c: thing1 # MATCHES
d: cat cat
b2:
c: thing2 # MATCHES
d: dog dog
b3:
d:
- f:
c: thing3 # MATCHES
d: beep
- f:
g:
c: thing4 # MATCHES
d: boop
- d: moooSearch by children nodes
You can search children by nodes - note that this will return the parent of the matching expression, in the example below the parent(s) will be the matching indices of the 'a' array. We can then navigate down to get 'b.c' of each matching indice.
'a.(b.d==cat).b.c'
a:
- b:
c: thing0
d: leopard
ba: fast
- b:
c: thing1 # MATCHES
d: cat
ba: meowy
- b:
c: thing2
d: caterpillar
ba: icky
- b:
c: thing3 # MATCHES
d: cat
ba: also meowyWith prefixes
'a.(b.d==cat*).c'
a:
- b:
c: thing0
d: leopard
ba: fast
- b:
c: thing1 # MATCHES
d: cat
ba: meowy
- b:
c: thing2 # MATCHES
d: caterpillar
ba: icky
- b:
c: thing3 # MATCHES
d: cat
ba: also meowyMatching children values
'animals(.==cat)'
animals:
- dog
- cat # MATCHES
- ratthis also works in maps, and with prefixes
'animals(.==c*)'
animals:
friendliest: cow # MATCHES
favourite: cat # MATCHES
smallest: ratSpecial Characters
When your yaml field has special characters that overlap with yq path expression characters, you will need to escape them in order for the command to work.
Keys with dots
When specifying a key that has a dot use key lookup indicator.
b:
foo.bar: 7yaml r sample.yaml 'b."foo.bar"'yaml w sample.yaml 'b."foo.bar"' 9Any valid yaml key can be specified as part of a key lookup.
Note that the path is in single quotes to avoid the double quotes being interpreted by your shell.
Keys (and values) with leading dashes
The flag terminator needs to be used to stop the app from attempting to parse the subsequent arguments as flags, if they start if a dash.
yq n -j -- --key --valueWill result in
--key: --valueLast updated
Was this helpful?