Для замены значений в тексте и строках есть ключ Powershell replace. Обычно этот ключ используется, например, для замены http на https в каком-то большом тексте или последнего октета IP адреса. С этим ключом можно использовать регулярные выражения.
Для примера у нас есть следующий текст:
$string = 'Большая Дмитровка дом 3'
Заменим слово 'дом' на сокращенный вариант и выведем результат:
$string = $string -replace 'дом','д.'
$string
Может быть так, что мы хотим заменить множество значений в одном тексте. Ключ replace можно использовать множество раз. На примере ниже я заменю слова на латинице на кириллицу:
$text = 'One,два,три,четыре,five'
$text = $text -replace 'one','один' -replace 'Five','пять'
$text
Как вы видите, регистр букв (большая или маленькая) не имеет значение. Если для вас это важно, то можно использовать -creplace, который будет учитывать регистр букв при совпадении.
Если вы хотите заменить значение, которое в тексте встречается множество раз, заменяться они все. Аналогичное сработает и с массивом Powershell:
$example1 = 'проsто текsт'
$example2 = 'проsто', 'текsт'
$example1 -replace 's','с'
$example2 -replace 's','с'
Допустим у вас есть файл с текстом в котором находятся разные числа и их необходимо убрать. Так как это не один и тот же текст обычный способ не подойдет и необходимо использовать регулярные выражения.
$string = 'дима получил 100 рублей, а володя 200 рублей'
$string -replace '[0-9]'
Так как я не указал на что заменять совпадающую часть, то она у меня просто удалилась. Значение '[0-9]' в регулярных выражения говорит, что я заменяю все цифры от 0 до 9.
В Powershell replace можно указать группы захвата. Группы захвата делятся на три типа:
- $0 - строка, которую мы указываем для замены
- $1 - содержимое первой группы
- $2 - содержимое второй группы и т.д.
Это используется в регулярных выражениях. Допустим в тексте у вас есть множество дат американского формата 12/31/2019 и все их нужно заменить на российский. Мы можем выполнить замену так, что день месяца стоял бы первым, а сам месяц вторым:
$date = '12/31/2019'
$date -replace '^([0-9]{2}).([0-9]{2})','$2/$1'
Символ ^ обозначает начало строки. Скобки такого типа () говорят, что это группа один $1 и два $2. В обоих случаях я ищу два числа подряд разделенными каким-то символом.
Другой пример выражения с окончаниями. Шаблон для замены один, а склонения могут быть разными:
'первый' -replace 'первы[йм]','$0 снег'
'первым' -replace 'первы[йм]','$0 снегом'
...
Подписывайтесь на наш Telegram канал
Теги: #powershell