nushell/crates
David Scholberg 81abb17b38
Add multiline regex flag to str replace (#9508)
# Description

This change adds a new flag to the `str replace` command: `--multiline`,
`-m`. This flag will automatically add the multiline regex flag `(?m)`
to the beginning of the supplied regex, allowing for the `^` and `$`
regex characters to match the beginnings and ends of lines,
respectively.

The main advantage of this addition is to make `str replace` more
closely match sed's default behavior of performing matches per-line with
a simple cli flag as opposed to forcing the user to add the {somewhat
clunky) regex flag themselves. This could be an especially valuable
addition since [`str replace` is listed as an alternative to sed in the
official
documentation](https://www.nushell.sh/book/coming_from_bash.html).

With this change, the following two commands would be functionally
equivalent:

```bash
# bash
printf "non-matching line\n123. one line\n124. another line\n" | sed -r 's/^[0-9]+\. //'
```

```bash
# nu
"non-matching line\n123. one line\n124. another line\n" | str replace -am '^[0-9]+\. ' ''
```

both producing the following output:

```
non-matching line
one line
another line
```

# User-Facing Changes

1. Adds a new flag to the `str replace` command: `--multiline`, `-m`.

# Tests + Formatting

I have update the unit tests to test this flag.
<!--
Don't forget to add tests that cover your changes.

Make sure you've run and fixed any issues with these commands:

- `cargo fmt --all -- --check` to check standard code formatting (`cargo
fmt --all` applies these changes)
- `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A
clippy::needless_collect -A clippy::result_large_err` to check that
you're using the standard code style
- `cargo test --workspace` to check that all tests pass
- `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the
standard library

> **Note**
> from `nushell` you can also use the `toolkit` as follows
> ```bash
> use toolkit.nu # or use an `env_change` hook to activate it
automatically
> toolkit check pr
> ```
-->

# After Submitting
<!-- If your PR had any user-facing changes, update [the
documentation](https://github.com/nushell/nushell.github.io) after the
PR is merged, if necessary. This will help us keep the docs up to date.
-->
I will submit a PR for all relevant documentation changes as soon as
this PR is approved.
2023-06-23 20:08:02 +02:00
..
nu_plugin_custom_values Bump to 0.81.1 as development version (#9379) 2023-06-07 15:06:42 +02:00
nu_plugin_example Bump to 0.81.1 as development version (#9379) 2023-06-07 15:06:42 +02:00
nu_plugin_formats update ini dependency (#9426) 2023-06-13 13:33:00 -05:00
nu_plugin_gstat Bump to 0.81.1 as development version (#9379) 2023-06-07 15:06:42 +02:00
nu_plugin_inc Bump to 0.81.1 as development version (#9379) 2023-06-07 15:06:42 +02:00
nu_plugin_python update nu_plugin_python due to signature changes (#8107) 2023-02-18 13:27:24 +00:00
nu_plugin_query revert: move to ahash (#9464) 2023-06-18 15:27:57 +12:00
nu-cli split $nu variable into scope commands and simpler $nu (#9487) 2023-06-21 09:33:01 +12:00
nu-cmd-base move common tools from nu-command to nu-cmd-base (#9455) 2023-06-22 14:45:54 -07:00
nu-cmd-dataframe revert: move to ahash (#9464) 2023-06-18 15:27:57 +12:00
nu-cmd-extra revert: move to ahash (#9464) 2023-06-18 15:27:57 +12:00
nu-cmd-lang split $nu variable into scope commands and simpler $nu (#9487) 2023-06-21 09:33:01 +12:00
nu-color-config revert: move to ahash (#9464) 2023-06-18 15:27:57 +12:00
nu-command Add multiline regex flag to str replace (#9508) 2023-06-23 20:08:02 +02:00
nu-engine split $nu variable into scope commands and simpler $nu (#9487) 2023-06-21 09:33:01 +12:00
nu-explore nu-table/ Fix indexing issue for table --expand (#9484) 2023-06-20 20:27:00 +12:00
nu-glob Bump to 0.81.1 as development version (#9379) 2023-06-07 15:06:42 +02:00
nu-json Apply nightly clippy fixes (#9482) 2023-06-20 10:17:33 +02:00
nu-parser revert: move to ahash (#9464) 2023-06-18 15:27:57 +12:00
nu-path make *dots* tests easier to read (#9467) 2023-06-20 20:28:10 +12:00
nu-plugin revert: move to ahash (#9464) 2023-06-18 15:27:57 +12:00
nu-pretty-hex Bump to 0.81.1 as development version (#9379) 2023-06-07 15:06:42 +02:00
nu-protocol clean up config by removing legacy options (#9496) 2023-06-23 06:17:10 -05:00
nu-std split $nu variable into scope commands and simpler $nu (#9487) 2023-06-21 09:33:01 +12:00
nu-system Bump once_cell from 1.17.1 to 1.18.0 (#9474) 2023-06-19 06:16:00 +00:00
nu-table nu-table/ Fix indexing issue for table --expand (#9484) 2023-06-20 20:27:00 +12:00
nu-term-grid Bump to 0.81.1 as development version (#9379) 2023-06-07 15:06:42 +02:00
nu-test-support Bump to 0.81.1 as development version (#9379) 2023-06-07 15:06:42 +02:00
nu-utils clean up config by removing legacy options (#9496) 2023-06-23 06:17:10 -05:00
README.md Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00

Nushell core libraries and plugins

These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.

Foundational libraries are split into two kinds of crates:

  • Core crates - those crates that work together to build the Nushell language engine
  • Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.

Plugins are likewise also split into two types:

  • Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
  • Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.