You can specify on which side the trimming occurs with the `--right` and `--left` options. (`-r` and `-l` being the short-form options respectively)
To trim a specific character, use `--char <Character>` or `-c <Character>` to specify the character to trim.
Here's an example of all the options in action:
```nu
'=== Nu shell ===' | str trim -r -c '='
# => === Nu shell
```
### Substrings
Substrings are slices of a string. They have a startpoint and an endpoint. Here's an example of using a substring:
```nu
'Hello World!' | str index-of 'o'
# => 4
'Hello World!' | str index-of 'r'
# => 8
'Hello World!' | str substring 4..8
# => o Wo
```
### String Padding
With the [`fill`](/commands/docs/fill.md) command you can add padding to a string. Padding adds characters to string until it's a certain length. For example:
```nu
'1234' | fill -a right -c '0' -w 10
# => 0000001234
'1234' | fill -a left -c '0' -w 10 | str length
# => 10
```
### Reversing Strings
This can be done easily with the [`str reverse`](/commands/docs/str_reverse.md) command.
```nu
'Nushell' | str reverse
# => llehsuN
['Nushell' 'is' 'cool'] | str reverse
# => ╭───┬─────────╮
# => │ 0 │ llehsuN │
# => │ 1 │ si │
# => │ 2 │ looc │
# => ╰───┴─────────╯
```
## String Parsing
With the [`parse`](/commands/docs/parse.md) command you can parse a string into columns. For example:
```nu
'Nushell 0.80' | parse '{shell} {version}'
# => ╭───┬─────────┬─────────╮
# => │ # │ shell │ version │
# => ├───┼─────────┼─────────┤
# => │ 0 │ Nushell │ 0.80 │
# => ╰───┴─────────┴─────────╯
'where all data is structured!' | parse --regex '(?P<subject>\w*\s?\w+) is (?P<adjective>\w+)'
# => ╭───┬──────────┬────────────╮
# => │ # │ subject │ adjective │
# => ├───┼──────────┼────────────┤
# => │ 0 │ all data │ structured │
# => ╰───┴──────────┴────────────╯
```
If a string is known to contain comma-separated, tab-separated or multi-space-separated data, you can use [`from csv`](/commands/docs/from_csv.md), [`from tsv`](/commands/docs/from_tsv.md) or [`from ssv`](/commands/docs/from_ssv.md):
```nu
"acronym,long\nAPL,A Programming Language" | from csv
# => ╭───┬─────────┬────────────────────────╮
# => │ # │ acronym │ long │
# => ├───┼─────────┼────────────────────────┤
# => │ 0 │ APL │ A Programming Language │
# => ╰───┴─────────┴────────────────────────╯
"name duration\nonestop.mid 4:06" | from ssv
# => ╭───┬─────────────┬──────────╮
# => │ # │ name │ duration │
# => ├───┼─────────────┼──────────┤
# => │ 0 │ onestop.mid │ 4:06 │
# => ╰───┴─────────────┴──────────╯
"rank\tsuit\nJack\tSpades\nAce\tClubs" | from tsv
# => ╭───┬──────┬────────╮
# => │ # │ rank │ suit │
# => ├───┼──────┼────────┤
# => │ 0 │ Jack │ Spades │
# => │ 1 │ Ace │ Clubs │
# => ╰───┴──────┴────────╯
```
## String Comparison
In addition to the standard `==` and `!=` operators, a few operators exist for specifically comparing strings to one another.
Those familiar with Bash and Perl will recognise the regex comparison operators:
```nu
'APL' =~ '^\w{0,3}$'
# => true
'FORTRAN' !~ '^\w{0,3}$'
# => true
```
Two other operators exist for simpler comparisons:
```nu
'JavaScript' starts-with 'Java'
# => true
'OCaml' ends-with 'Caml'
# => true
```
## Converting Strings
There are multiple ways to convert strings to and from other types.
### To string
1. Using [`into string`](/commands/docs/into_string.md). e.g. `123 | into string`
2. Using string interpolation. e.g. `$'(123)'`
### From string
1. Using [`into <type>`](/commands/docs/into.md). e.g. `'123' | into int`
## Coloring Strings
You can color strings with the [`ansi`](/commands/docs/ansi.md) command. For example:
```nu
$'(ansi purple_bold)This text is a bold purple!(ansi reset)'
```
`ansi purple_bold` makes the text a bold purple
`ansi reset` resets the coloring to the default.
::: tip
You should always end colored strings with `ansi reset`
:::