Better string sub documentation

This commit is contained in:
Mike Farah 2021-04-16 16:07:40 +10:00
parent 6c26344449
commit b2a538bdfc
3 changed files with 7 additions and 5 deletions

View File

@ -20,6 +20,7 @@ cat; meow; 1; ; true
## Substitute / Replace string ## Substitute / Replace string
This uses golang regex, described [here](https://github.com/google/re2/wiki/Syntax) This uses golang regex, described [here](https://github.com/google/re2/wiki/Syntax)
Note the use of `|=` to run in context of the current string value.
Given a sample.yml file of: Given a sample.yml file of:
```yaml ```yaml
@ -36,6 +37,7 @@ a: cats are great
## Substitute / Replace string with regex ## Substitute / Replace string with regex
This uses golang regex, described [here](https://github.com/google/re2/wiki/Syntax) This uses golang regex, described [here](https://github.com/google/re2/wiki/Syntax)
Note the use of `|=` to run in context of the current string value.
Given a sample.yml file of: Given a sample.yml file of:
```yaml ```yaml
@ -44,7 +46,7 @@ b: heat
``` ```
then then
```bash ```bash
yq eval '.[] |= sub("([a])", "${1}r")' sample.yml yq eval '.[] |= sub("(a)", "${1}r")' sample.yml
``` ```
will output will output
```yaml ```yaml

View File

@ -62,7 +62,7 @@ func substituteStringOperator(d *dataTreeNavigator, context Context, expressionN
candidate := el.Value.(*CandidateNode) candidate := el.Value.(*CandidateNode)
node := unwrapDoc(candidate.Node) node := unwrapDoc(candidate.Node)
if node.Tag != "!!str" { if node.Tag != "!!str" {
return Context{}, fmt.Errorf("cannot sustitute with %v, can only substitute strings", node.Tag) return Context{}, fmt.Errorf("cannot substitute with %v, can only substitute strings. Hint: Most often you'll want to use '|=' over '=' for this operation.", node.Tag)
} }
targetNode := substitute(node.Value, regEx, replacementText) targetNode := substitute(node.Value, regEx, replacementText)

View File

@ -15,7 +15,7 @@ var stringsOperatorScenarios = []expressionScenario{
}, },
{ {
description: "Substitute / Replace string", description: "Substitute / Replace string",
subdescription: "This uses golang regex, described [here](https://github.com/google/re2/wiki/Syntax)", subdescription: "This uses golang regex, described [here](https://github.com/google/re2/wiki/Syntax)\nNote the use of `|=` to run in context of the current string value.",
document: `a: dogs are great`, document: `a: dogs are great`,
expression: `.a |= sub("dogs", "cats")`, expression: `.a |= sub("dogs", "cats")`,
expected: []string{ expected: []string{
@ -24,9 +24,9 @@ var stringsOperatorScenarios = []expressionScenario{
}, },
{ {
description: "Substitute / Replace string with regex", description: "Substitute / Replace string with regex",
subdescription: "This uses golang regex, described [here](https://github.com/google/re2/wiki/Syntax)", subdescription: "This uses golang regex, described [here](https://github.com/google/re2/wiki/Syntax)\nNote the use of `|=` to run in context of the current string value.",
document: "a: cat\nb: heat", document: "a: cat\nb: heat",
expression: `.[] |= sub("([a])", "${1}r")`, expression: `.[] |= sub("(a)", "${1}r")`,
expected: []string{ expected: []string{
"D0, P[], (doc)::a: cart\nb: heart\n", "D0, P[], (doc)::a: cart\nb: heart\n",
}, },