str replace для строк
Сигнатура
> str replace {flags} (find) (replace) ...rest
Флаги
-
--all, -a: Заменить все вхождения шаблона. -
--no-expand, -n: Не подставлять группы захвата (например, $name) в строку замены. -
--regex, -r: Сопоставлять шаблон со входными данными как регулярное выражение, а не как подстроку. -
--multiline, -m: Режим многострочных регулярных выражений (подразумевает --regex): ^ и $ соответствуют началу/концу строки; эквивалентно (?m).
Параметры
-
find: Шаблон для поиска. -
replace: Строка замены или замыкание, которое её генерирует. -
...rest: Для входной структуры данных обрабатывать строки по указанным путям к ячейкам.
Типы входных и выходных данных:
| вход | выход |
|---|---|
| string | string |
| table | table |
| record | record |
| list<string> | list<string> |
Примеры
Найти и заменить первое вхождение подстроки.
> 'c:\some\cool\path' | str replace 'c:\some\cool' '~' ~\path
Найти и заменить все вхождения подстроки.
> 'abc abc abc' | str replace --all 'b' 'z' azc azc azc
Найти и заменить содержимое с помощью группы захвата и регулярного выражения.
> 'my_library.rb' | str replace -r '(.+).rb' '$1.nu' my_library.nu
Найти и заменить содержимое с помощью группы захвата и регулярного выражения с экранированием.
> 'hello=world' | str replace -r '\$?(?<varname>.*)=(?<value>.*)' '$$$varname = $value' $hello = world
Найти и заменить все вхождения найденной строки с помощью регулярного выражения.
> 'abc abc abc' | str replace --all --regex 'b' 'z' azc azc azc
Найти и заменить все вхождения найденной строки в таблице с помощью регулярного выражения.
> [[ColA ColB ColC]; [abc abc ads]] | str replace --all --regex 'b' 'z' ColA ColC ╭───┬──────┬──────┬──────╮ │ # │ ColA │ ColB │ ColC │ ├───┼──────┼──────┼──────┤ │ 0 │ azc │ abc │ ads │ ╰───┴──────┴──────┴──────╯
Найти и заменить все вхождения найденной строки в записи с помощью регулярного выражения.
> { KeyA: abc, KeyB: abc, KeyC: ads } | str replace --all --regex 'b' 'z' KeyA KeyC
╭──────┬─────╮
│ KeyA │ azc │
│ KeyB │ abc │
│ KeyC │ ads │
╰──────┴─────╯Найти и заменить содержимое, не используя параметр замены как регулярное выражение.
> 'dogs_$1_cats' | str replace -r '\$1' '$2' -n dogs_$2_cats
Использовать группы захвата для обработки входного текста с помощью регулярного выражения.
> "abc-def" | str replace -r "(.+)-(.+)" "${2}_${1}"
def_abcНайти и заменить с помощью регулярного выражения fancy-regex.
> 'a successful b' | str replace -r '\b([sS])uc(?:cs|s?)e(ed(?:ed|ing|s?)|ss(?:es|ful(?:ly)?|i(?:ons?|ve(?:ly)?)|ors?)?)\b' '${1}ucce$2'
a successful bНайти и заменить с помощью регулярного выражения fancy-regex.
> 'GHIKK-9+*' | str replace -r '[*[:xdigit:]+]' 'z' GHIKK-z+*
Найти и заменить текст в отдельных строках с помощью многострочного регулярного выражения.
> "non-matching line\n123. one line\n124. another line\n" | str replace --all --multiline '^[0-9]+\. ' '' non-matching line one line another line
Найти и заменить последовательности экранирования обратной косой черты с помощью замыкания.
> 'string: \"abc\" backslash: \\ newline:\nend' | str replace -a -r '\\(.)' {|char| if $char == "n" { "\n" } else { $char } }
string: "abc" backslash: \ newline:
endПримечания
Шаблон для поиска может быть подстрокой (по умолчанию) или регулярным выражением (с --regex).
Замена может быть строкой, возможно содержащей ссылки на пронумерованные ($1 и т. д.) или именованные группы захвата ($name), либо замыканием, которое вызывается для каждого совпадения. Во втором случае замыкание получает всё совпадение в качестве входных данных, а группы захвата — в качестве аргумента. Оно должно возвращать строку, которая будет использоваться для замены совпадения.
Copyright © 2019–2026 The Nushell Project DevelopersLicensed under the MIT License.
https://www.nushell.sh/commands/docs/str_replace.html