yq/pkg/yqlib/doc/String Operators.md

2.7 KiB

String Operators

RegEx

This uses golangs native regex functions under the hood - See https://github.com/google/re2/wiki/Syntax for the supported syntax.

Join strings

Given a sample.yml file of:

- cat
- meow
- 1
- null
- true

then

yq eval 'join("; ")' sample.yml

will output

cat; meow; 1; ; true

Match string

Given a sample.yml file of:

cat

then

yq eval 'match("at")' sample.yml

will output

string: at
offset: 1
length: 2
captures: []

Match string, case insensitive

Given a sample.yml file of:

cAt

then

yq eval 'match("(?i)at")' sample.yml

will output

string: At
offset: 1
length: 2
captures: []

Match with capture groups

Given a sample.yml file of:

a cat

then

yq eval 'match("c(.t)")' sample.yml

will output

string: cat
offset: 2
length: 3
captures:
  - string: at
    offset: 3
    length: 2

Match with named capture groups

Given a sample.yml file of:

a cat

then

yq eval 'match("c(?P<cool>.t)")' sample.yml

will output

string: cat
offset: 2
length: 3
captures:
  - string: at
    offset: 3
    length: 2
    name: cool

Match without global flag

Given a sample.yml file of:

cat cat

then

yq eval 'match("cat")' sample.yml

will output

string: cat
offset: 0
length: 3
captures: []

Match with global flag

Given a sample.yml file of:

cat cat

then

yq eval 'match("cat"; "g")' sample.yml

will output

string: cat
offset: 0
length: 3
captures: []
string: cat
offset: 4
length: 3
captures: []

Substitute / Replace string

This uses golang regex, described here Note the use of |= to run in context of the current string value.

Given a sample.yml file of:

a: dogs are great

then

yq eval '.a |= sub("dogs", "cats")' sample.yml

will output

a: cats are great

Substitute / Replace string with regex

This uses golang regex, described here Note the use of |= to run in context of the current string value.

Given a sample.yml file of:

a: cat
b: heat

then

yq eval '.[] |= sub("(a)", "${1}r")' sample.yml

will output

a: cart
b: heart

Split strings

Given a sample.yml file of:

cat; meow; 1; ; true

then

yq eval 'split("; ")' sample.yml

will output

- cat
- meow
- "1"
- ""
- "true"

Split strings one match

Given a sample.yml file of:

word

then

yq eval 'split("; ")' sample.yml

will output

- word