This commit is contained in:
Mike Farah 2023-11-23 11:59:14 +11:00
parent b06ab987b1
commit cac23ac003
11 changed files with 170 additions and 14 deletions

View File

@ -4,7 +4,7 @@ The `or` and `and` operators take two parameters and return a boolean result.
`not` flips a boolean from true to false, or vice versa. `not` flips a boolean from true to false, or vice versa.
`any` will return `true` if there are any `true` values in a array sequence, and `all` will return true if _all_ elements in an array are true. `any` will return `true` if there are any `true` values in an array sequence, and `all` will return true if _all_ elements in an array are true.
`any_c(condition)` and `all_c(condition)` are like `any` and `all` but they take a condition expression that is used against each element to determine if it's `true`. Note: in `jq` you can simply pass a condition to `any` or `all` and it simply works - `yq` isn't that clever..yet `any_c(condition)` and `all_c(condition)` are like `any` and `all` but they take a condition expression that is used against each element to determine if it's `true`. Note: in `jq` you can simply pass a condition to `any` or `all` and it simply works - `yq` isn't that clever..yet

View File

@ -187,7 +187,6 @@ yq '. head_comment="single"' sample.yml
will output will output
```yaml ```yaml
# single # single
a: cat a: cat
``` ```

View File

@ -66,6 +66,7 @@ will output
```yaml ```yaml
Mike: cat Mike: cat
Mike: dog Mike: dog
---
Rosey: monkey Rosey: monkey
Rosey: sheep Rosey: sheep
``` ```

View File

@ -85,6 +85,7 @@ will output
```yaml ```yaml
match: cat match: cat
doc: 0 doc: 0
---
match: frog match: frog
doc: 1 doc: 1
``` ```

View File

@ -54,7 +54,6 @@ yq eval-all 'file_index' sample.yml another.yml
will output will output
```yaml ```yaml
0 0
---
1 1
``` ```

77
operators/kind.md Normal file
View File

@ -0,0 +1,77 @@
## Get kind
Given a sample.yml file of:
```yaml
a: cat
b: 5
c: 3.2
e: true
f: []
g: {}
h: null
```
then
```bash
yq '.. | kind' sample.yml
```
will output
```yaml
map
scalar
scalar
scalar
scalar
seq
map
scalar
```
## Get kind, ignores custom tags
Unlike tag, kind is not affected by custom tags.
Given a sample.yml file of:
```yaml
a: !!thing cat
b: !!foo {}
c: !!bar []
```
then
```bash
yq '.. | kind' sample.yml
```
will output
```yaml
map
scalar
map
seq
```
## Add comments only to scalars
An example of how you can use kind
Given a sample.yml file of:
```yaml
a:
b: 5
c: 3.2
e: true
f: []
g: {}
h: null
```
then
```bash
yq '(.. | select(kind == "scalar")) line_comment = "this is a scalar"' sample.yml
```
will output
```yaml
a:
b: 5 # this is a scalar
c: 3.2 # this is a scalar
e: true # this is a scalar
f: []
g: {}
h: null # this is a scalar
```

View File

@ -519,7 +519,7 @@ will output
some: thing some: thing
``` ```
## Merging an null with an array ## Merging a null with an array
Running Running
```bash ```bash
yq --null-input 'null * ["some"]' yq --null-input 'null * ["some"]'

49
operators/to_number.md Normal file
View File

@ -0,0 +1,49 @@
# To Number
Parses the input as a number. yq will try to parse values as an int first, failing that it will try float. Values that already ints or floats will be left alone.
## Converts strings to numbers
Given a sample.yml file of:
```yaml
- "3"
- "3.1"
- "-1e3"
```
then
```bash
yq '.[] | to_number' sample.yml
```
will output
```yaml
3
3.1
-1e3
```
## Doesn't change numbers
Given a sample.yml file of:
```yaml
- 3
- 3.1
- -1e3
```
then
```bash
yq '.[] | to_number' sample.yml
```
will output
```yaml
3
3.1
-1e3
```
## Cannot convert null
Running
```bash
yq --null-input '.a.b | to_number'
```
will output
```bash
Error: cannot convert node value [null] at path a.b of tag !!null to number
```

View File

@ -14,7 +14,7 @@ Given a sample.json file of:
``` ```
then then
```bash ```bash
yq -P '.' sample.json yq -p=json sample.json
``` ```
will output will output
```yaml ```yaml
@ -30,7 +30,7 @@ Given a sample.json file of:
``` ```
then then
```bash ```bash
yq -P '.' sample.json yq -p=json sample.json
``` ```
will output will output
```yaml ```yaml

View File

@ -1,5 +1,33 @@
## Basic example ## Basic input example
Given a sample.lua file of:
```lua
return {
["country"] = "Australia"; -- this place
["cities"] = {
"Sydney",
"Melbourne",
"Brisbane",
"Perth",
};
};
```
then
```bash
yq -oy '.' sample.lua
```
will output
```yaml
country: Australia
cities:
- Sydney
- Melbourne
- Brisbane
- Perth
```
## Basic output example
Given a sample.yml file of: Given a sample.yml file of:
```yaml ```yaml
--- ---
@ -101,6 +129,8 @@ numbers:
- octal: 0o30 - octal: 0o30
- float: 123.45 - float: 123.45
- infinity: .inf - infinity: .inf
plus_infinity: +.inf
minus_infinity: -.inf
- not: .nan - not: .nan
``` ```
@ -134,6 +164,8 @@ return {
}, },
{ {
["infinity"] = (1/0); ["infinity"] = (1/0);
["plus_infinity"] = (1/0);
["minus_infinity"] = (-1/0);
}, },
{ {
["not"] = (0/0); ["not"] = (0/0);

View File

@ -129,15 +129,13 @@ zoo:
``` ```
## Parse xml: force all as an array ## Parse xml: force all as an array
Because of the way yq works, when updating everything you need to update the children before the parents. By default `..` will match parents first, so we reverse that before updating.
Given a sample.xml file of: Given a sample.xml file of:
```xml ```xml
<zoo><thing><frog>boing</frog></thing></zoo> <zoo><thing><frog>boing</frog></thing></zoo>
``` ```
then then
```bash ```bash
yq -oy '([..] | reverse | .[]) |= [] + .' sample.xml yq -oy '.. |= [] + .' sample.xml
``` ```
will output will output
```yaml ```yaml