mirror of
https://github.com/mikefarah/yq.git
synced 2024-12-19 20:19:04 +00:00
wip - rabbit hole :/
This commit is contained in:
parent
42843763ca
commit
e3ccd05a00
@ -31,8 +31,7 @@ will output
|
||||
lc: ""
|
||||
fc: ""
|
||||
- p: hello
|
||||
isKey: null
|
||||
true: null
|
||||
isKey: true
|
||||
hc: ""
|
||||
lc: hello-world-comment
|
||||
fc: ""
|
||||
@ -42,8 +41,7 @@ will output
|
||||
lc: ""
|
||||
fc: ""
|
||||
- p: hello.message
|
||||
isKey: null
|
||||
true: null
|
||||
isKey: true
|
||||
hc: ""
|
||||
lc: ""
|
||||
fc: ""
|
||||
|
@ -5,8 +5,7 @@ Deletes matching entries in maps or arrays.
|
||||
## Delete entry in map
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: cat
|
||||
b: dog
|
||||
{a: cat, b: dog}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -14,15 +13,13 @@ yq 'del(.b)' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a: cat
|
||||
{a: cat}
|
||||
```
|
||||
|
||||
## Delete nested entry in map
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
a1: fred
|
||||
a2: frood
|
||||
{a: {a1: fred, a2: frood}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -30,16 +27,13 @@ yq 'del(.a.a1)' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a:
|
||||
a2: frood
|
||||
{a: {a2: frood}}
|
||||
```
|
||||
|
||||
## Delete entry in array
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
- 1
|
||||
- 2
|
||||
- 3
|
||||
[1, 2, 3]
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -47,15 +41,13 @@ yq 'del(.[1])' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
- 1
|
||||
- 3
|
||||
[1, 3]
|
||||
```
|
||||
|
||||
## Delete nested entry in array
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
- a: cat
|
||||
b: dog
|
||||
[{a: cat, b: dog}]
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -63,14 +55,13 @@ yq 'del(.[0].a)' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
- b: dog
|
||||
[{b: dog}]
|
||||
```
|
||||
|
||||
## Delete no matches
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: cat
|
||||
b: dog
|
||||
{a: cat, b: dog}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -78,16 +69,13 @@ yq 'del(.c)' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a: cat
|
||||
b: dog
|
||||
{a: cat, b: dog}
|
||||
```
|
||||
|
||||
## Delete matching entries
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: cat
|
||||
b: dog
|
||||
c: bat
|
||||
{a: cat, b: dog, c: bat}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -95,17 +83,13 @@ yq 'del( .[] | select(. == "*at") )' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
b: dog
|
||||
{b: dog}
|
||||
```
|
||||
|
||||
## Recursively delete matching keys
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
name: frog
|
||||
b:
|
||||
name: blog
|
||||
age: 12
|
||||
{a: {name: frog, b: {name: blog, age: 12}}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -113,8 +97,6 @@ yq 'del(.. | select(has("name")).name)' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a:
|
||||
b:
|
||||
age: 12
|
||||
{a: {b: {age: 12}}}
|
||||
```
|
||||
|
||||
|
@ -7,8 +7,7 @@ Divide behaves differently according to the type of the LHS:
|
||||
## String split
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: cat_meow
|
||||
b: _
|
||||
{a: cat_meow, b: _}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -16,11 +15,7 @@ yq '.c = .a / .b' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a: cat_meow
|
||||
b: _
|
||||
c:
|
||||
- cat
|
||||
- meow
|
||||
{a: cat_meow, b: _, c: [cat, meow]}
|
||||
```
|
||||
|
||||
## Number division
|
||||
@ -28,8 +23,7 @@ The result during division is calculated as a float
|
||||
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: 12
|
||||
b: 2.5
|
||||
{a: 12, b: 2.5}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -37,8 +31,7 @@ yq '.a = .a / .b' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a: 4.8
|
||||
b: 2.5
|
||||
{a: 4.8, b: 2.5}
|
||||
```
|
||||
|
||||
## Number division by zero
|
||||
@ -46,8 +39,7 @@ Dividing by zero results in +Inf or -Inf
|
||||
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: 1
|
||||
b: -1
|
||||
{a: 1, b: -1}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -55,7 +47,6 @@ yq '.a = .a / 0 | .b = .b / 0' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a: !!float +Inf
|
||||
b: !!float -Inf
|
||||
{a: !!float +Inf, b: !!float -Inf}
|
||||
```
|
||||
|
||||
|
@ -85,6 +85,7 @@ will output
|
||||
```yaml
|
||||
match: cat
|
||||
doc: 0
|
||||
---
|
||||
match: frog
|
||||
doc: 1
|
||||
```
|
||||
|
@ -30,8 +30,7 @@ Base64 assumes [rfc4648](https://rfc-editor.org/rfc/rfc4648.html) encoding. Enco
|
||||
## Encode value as json string
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
cool: thing
|
||||
{a: {cool: thing}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -39,12 +38,7 @@ yq '.b = (.a | to_json)' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a:
|
||||
cool: thing
|
||||
b: |
|
||||
{
|
||||
"cool": "thing"
|
||||
}
|
||||
{a: {cool: thing}, b: "{\n \"cool\": \"thing\"\n}\n"}
|
||||
```
|
||||
|
||||
## Encode value as json string, on one line
|
||||
@ -52,8 +46,7 @@ Pass in a 0 indent to print json on a single line.
|
||||
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
cool: thing
|
||||
{a: {cool: thing}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -61,9 +54,7 @@ yq '.b = (.a | to_json(0))' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a:
|
||||
cool: thing
|
||||
b: '{"cool":"thing"}'
|
||||
{a: {cool: thing}, b: '{"cool":"thing"}'}
|
||||
```
|
||||
|
||||
## Encode value as json string, on one line shorthand
|
||||
@ -71,8 +62,7 @@ Pass in a 0 indent to print json on a single line.
|
||||
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
cool: thing
|
||||
{a: {cool: thing}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -80,9 +70,7 @@ yq '.b = (.a | @json)' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a:
|
||||
cool: thing
|
||||
b: '{"cool":"thing"}'
|
||||
{a: {cool: thing}, b: '{"cool":"thing"}'}
|
||||
```
|
||||
|
||||
## Decode a json encoded string
|
||||
@ -104,8 +92,7 @@ cool: thing
|
||||
## Encode value as props string
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
cool: thing
|
||||
{a: {cool: thing}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -113,10 +100,7 @@ yq '.b = (.a | @props)' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a:
|
||||
cool: thing
|
||||
b: |
|
||||
cool = thing
|
||||
{a: {cool: thing}, b: "cool = thing\n"}
|
||||
```
|
||||
|
||||
## Decode props encoded string
|
||||
@ -273,10 +257,7 @@ Scalars are strings, numbers and booleans.
|
||||
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
- cat
|
||||
- thing1,thing2
|
||||
- true
|
||||
- 3.40
|
||||
[cat, 'thing1,thing2', true, 3.40]
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -290,14 +271,7 @@ cat,"thing1,thing2",true,3.40
|
||||
## Encode array of arrays as csv string
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
- - cat
|
||||
- thing1,thing2
|
||||
- true
|
||||
- 3.40
|
||||
- - dog
|
||||
- thing3
|
||||
- false
|
||||
- 12
|
||||
[[cat, 'thing1,thing2', true, 3.40], [dog, thing3, false, 12]]
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -314,14 +288,7 @@ Scalars are strings, numbers and booleans.
|
||||
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
- - cat
|
||||
- thing1,thing2
|
||||
- true
|
||||
- 3.40
|
||||
- - dog
|
||||
- thing3
|
||||
- false
|
||||
- 12
|
||||
[[cat, 'thing1,thing2', true, 3.40], [dog, thing3, false, 12]]
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -336,10 +303,7 @@ dog thing3 false 12
|
||||
## Encode value as xml string
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
cool:
|
||||
foo: bar
|
||||
+@id: hi
|
||||
{a: {cool: {foo: bar, +@id: hi}}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -356,10 +320,7 @@ will output
|
||||
## Encode value as xml string on a single line
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
cool:
|
||||
foo: bar
|
||||
+@id: hi
|
||||
{a: {cool: {foo: bar, +@id: hi}}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -374,10 +335,7 @@ will output
|
||||
## Encode value as xml string with custom indentation
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
cool:
|
||||
foo: bar
|
||||
+@id: hi
|
||||
{a: {cool: {foo: bar, +@id: hi}}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
|
@ -5,8 +5,7 @@ Similar to the same named functions in `jq` these functions convert to/from an o
|
||||
## to_entries Map
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: 1
|
||||
b: 2
|
||||
{a: 1, b: 2}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -23,8 +22,7 @@ will output
|
||||
## to_entries Array
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
- a
|
||||
- b
|
||||
[a, b]
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -41,7 +39,7 @@ will output
|
||||
## to_entries null
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
null
|
||||
[]
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -49,13 +47,13 @@ yq 'to_entries' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
[]
|
||||
```
|
||||
|
||||
## from_entries map
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: 1
|
||||
b: 2
|
||||
{a: 1, b: 2}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -63,8 +61,10 @@ yq 'to_entries | from_entries' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a: 1
|
||||
b: 2
|
||||
- a
|
||||
- 1
|
||||
- b
|
||||
- 2
|
||||
```
|
||||
|
||||
## from_entries with numeric key indices
|
||||
@ -72,8 +72,7 @@ from_entries always creates a map, even for numeric keys
|
||||
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
- a
|
||||
- b
|
||||
[a, b]
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -81,15 +80,16 @@ yq 'to_entries | from_entries' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
0: a
|
||||
1: b
|
||||
- 0
|
||||
- a
|
||||
- 1
|
||||
- b
|
||||
```
|
||||
|
||||
## Use with_entries to update keys
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: 1
|
||||
b: 2
|
||||
{a: 1, b: 2}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -97,8 +97,10 @@ yq 'with_entries(.key |= "KEY_" + .)' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
KEY_a: 1
|
||||
KEY_b: 2
|
||||
- KEY_a
|
||||
- 1
|
||||
- KEY_b
|
||||
- 2
|
||||
```
|
||||
|
||||
## Custom sort map keys
|
||||
@ -106,9 +108,7 @@ Use to_entries to convert to an array of key/value pairs, sort the array using s
|
||||
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a: 1
|
||||
c: 3
|
||||
b: 2
|
||||
{a: 1, c: 3, b: 2}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -116,18 +116,19 @@ yq 'to_entries | sort_by(.key) | reverse | from_entries' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
c: 3
|
||||
b: 2
|
||||
a: 1
|
||||
!!tag
|
||||
- c
|
||||
- 3
|
||||
- b
|
||||
- 2
|
||||
- a
|
||||
- 1
|
||||
```
|
||||
|
||||
## Use with_entries to filter the map
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
a:
|
||||
b: bird
|
||||
c:
|
||||
d: dog
|
||||
{a: {b: bird}, c: {d: dog}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -135,7 +136,7 @@ yq 'with_entries(select(.value | has("b")))' sample.yml
|
||||
```
|
||||
will output
|
||||
```yaml
|
||||
a:
|
||||
b: bird
|
||||
- a
|
||||
- {b: bird}
|
||||
```
|
||||
|
||||
|
@ -21,8 +21,7 @@ cat
|
||||
## Multi value variable
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
- cat
|
||||
- dog
|
||||
[cat, dog]
|
||||
```
|
||||
then
|
||||
```bash
|
||||
@ -39,14 +38,7 @@ Example taken from [jq](https://stedolan.github.io/jq/manual/#Variable/SymbolicB
|
||||
|
||||
Given a sample.yml file of:
|
||||
```yaml
|
||||
"posts":
|
||||
- "title": First post
|
||||
"author": anon
|
||||
- "title": A well-written article
|
||||
"author": person1
|
||||
"realnames":
|
||||
"anon": Anonymous Coward
|
||||
"person1": Person McPherson
|
||||
{"posts": [{"title": First post, "author": anon}, {"title": A well-written article, "author": person1}], "realnames": {"anon": Anonymous Coward, "person1": Person McPherson}}
|
||||
```
|
||||
then
|
||||
```bash
|
||||
|
@ -35,15 +35,15 @@ func deleteChildOperator(d *dataTreeNavigator, context Context, expressionNode *
|
||||
}
|
||||
|
||||
parentNode := candidate.Parent
|
||||
parentPath := parentNode.GetPath()
|
||||
childPath := parentPath[len(parentPath)-1]
|
||||
candidatePath := candidate.GetPath()
|
||||
childPath := candidatePath[len(candidatePath)-1]
|
||||
|
||||
if parentNode.Kind == MappingNode {
|
||||
deleteFromMap(candidate.Parent, childPath)
|
||||
} else if parentNode.Kind == SequenceNode {
|
||||
deleteFromArray(candidate.Parent, childPath)
|
||||
} else {
|
||||
return Context{}, fmt.Errorf("Cannot delete nodes from parent of tag %v", parentNode.Tag)
|
||||
return Context{}, fmt.Errorf("cannot delete nodes from parent of tag %v", parentNode.Tag)
|
||||
}
|
||||
}
|
||||
return context, nil
|
||||
|
@ -100,7 +100,7 @@ var deleteOperatorScenarios = []expressionScenario{
|
||||
document: `{a: {a1: fred, a2: frood}}`,
|
||||
expression: `del(.. | select(.=="frood"))`,
|
||||
expected: []string{
|
||||
"D0, P[], (!!map)::{a: {a1: fred}}\n",
|
||||
"D0, P[], (doc)::{a: {a1: fred}}\n",
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -131,16 +131,14 @@ var deleteOperatorScenarios = []expressionScenario{
|
||||
skipDoc: true,
|
||||
document: `a: {thing1: yep, thing2: cool, thing3: hi, b: {thing1: cool, great: huh}}`,
|
||||
expression: `del(..)`,
|
||||
expected: []string{
|
||||
"D0, P[], (!!map)::{}\n",
|
||||
},
|
||||
expected: []string{},
|
||||
},
|
||||
{
|
||||
skipDoc: true,
|
||||
document: `a: {thing1: yep, thing2: cool, thing3: hi, b: {thing1: cool, great: huh}}`,
|
||||
expression: `del(.. | select(tag == "!!map") | (.b.thing1,.thing2))`,
|
||||
expected: []string{
|
||||
"D0, P[], (!!map)::a: {thing1: yep, thing3: hi, b: {great: huh}}\n",
|
||||
"D0, P[], (doc)::a: {thing1: yep, thing3: hi, b: {great: huh}}\n",
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -172,7 +170,7 @@ var deleteOperatorScenarios = []expressionScenario{
|
||||
document: `{a: {name: frog, b: {name: blog, age: 12}}}`,
|
||||
expression: `del(.. | select(has("name")).name)`,
|
||||
expected: []string{
|
||||
"D0, P[], (!!map)::{a: {b: {age: 12}}}\n",
|
||||
"D0, P[], (doc)::{a: {b: {age: 12}}}\n",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ var documentIndexScenarios = []expressionScenario{
|
||||
expression: `.a | ({"match": ., "doc": document_index})`,
|
||||
expected: []string{
|
||||
"D0, P[], (!!map)::match: cat\ndoc: 0\n",
|
||||
"D0, P[], (!!map)::match: frog\ndoc: 1\n",
|
||||
"D1, P[], (!!map)::match: frog\ndoc: 1\n",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user