Path Expressions
+ +Path expressions are used to deeply navigate and match particular yaml nodes.
+As a general rule, you should wrap paths in quotes in the CLI to prevent your interpreter from processing '*, []' and other special characters.
+Simple expressions¶
+Maps¶
+a.b.c
+a:
+ b:
+ c: thing # MATCHES
+
+
+Arrays¶
+a.b[1].c
+a:
+ b:
+ - c: thing0
+ - c: thing1 # MATCHES
+ - c: thing2
+
+
+Appending to arrays¶
+(e.g. when using the write command)
+a.b[+].c
+a:
+ b:
+ - c: thing0
+
+
+Will add a new entry:
+a:
+ b:
+ - c: thing0
+ - c: thing1 # NEW entry from [+] on B array.
+
+
+Splat¶
+Maps¶
+a.*.c
+a:
+ b1:
+ c: thing # MATCHES
+ b2:
+ c: thing # MATCHES
+
+
+Arrays¶
+a.b[*].c
+a:
+ b:
+ - c: thing0 # MATCHES
+ - c: thing1 # MATCHES
+ - c: thing2 # MATCHES
+
+
+Deep Splat¶
+'**' will match arbitrary nodes for both maps and arrays:
+a.**.c
+a:
+ b1:
+ c: thing1 # MATCHES
+ b2:
+ c: thing2 # MATCHES
+ b3:
+ d:
+ - f:
+ c: thing3 # MATCHES
+ - f:
+ g:
+ c: thing4 # MATCHES
+
+
+Finding parents with particular children nodes¶
+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 meowy
+
+
+With 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 meowy
+
+
+Special Characters¶
+Keys with dots¶
+When specifying a key that has a dot use key lookup indicator.
+b:
+ foo.bar: 7
+
+
+yaml r sample.yaml 'b[foo.bar]'
+
+
+yaml w sample.yaml 'b[foo.bar]' 9
+
+
+Any valid yaml key can be specified as part of a key lookup.
+Note that the path is in quotes to avoid the square brackets being interpreted by your shell.
+Keys (and values) with leading dashes¶
+If a key or value has leading dashes, yq won't know that you are passing a value as opposed to a flag (and you will get a 'bad flag syntax' error).
+To fix that, you will need to tell it to stop processing flags by adding '--' after the last flag like so:
+yq n -t -- --key --value
+
+
+Will result in
+--key: --value
+
+
+
+
+
+
+
+
+
+
+