Замена строк и текста в файле с Powershell replace


08 сентября 2019


Powershell replace замена строк в тексте и файле

Для замены значений в тексте и строках есть ключ Powershell replace. Обычно этот ключ используется, например, для замены http на https в каком-то большом тексте или последнего октета IP адреса. С этим ключом можно использовать регулярные выражения.

Для примера у нас есть следующий текст:

$string = 'Большая Дмитровка дом 3'

Заменим слово 'дом' на сокращенный вариант и выведем результат:

$string = $string -replace 'дом','д.'
$string

powershell replace

Может быть так, что мы хотим заменить множество значений в одном тексте. Ключ replace можно использовать множество раз. На примере ниже я заменю слова на латинице на кириллицу:

$text = 'One,два,три,четыре,five'
$text = $text -replace 'one','один' -replace 'Five','пять'
$text

powershell replace примеры

Как вы видите, регистр букв (большая или маленькая) не имеет значение. Если для вас это важно, то можно использовать -creplace, который будет учитывать регистр букв при совпадении.

Если вы хотите заменить значение, которое в тексте встречается множество раз, заменяться они все. Аналогичное сработает и с массивом Powershell:

$example1 = 'проsто текsт'
$example2 = 'проsто', 'текsт'
$example1 -replace 's','с'
$example2 -replace 's','с'

powershell string replace

Допустим у вас есть файл с текстом в котором находятся разные числа и их необходимо убрать. Так как это не один и тот же текст обычный способ не подойдет и необходимо использовать регулярные выражения.

$string = 'дима получил 100 рублей, а володя 200 рублей'
$string -replace '[0-9]'

powershell замена строки в файле

Так как я не указал на что заменять совпадающую часть, то она у меня просто удалилась. Значение '[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'

powershell замена текста

Символ ^ обозначает начало строки. Скобки такого типа () говорят, что это группа один $1 и два $2. В обоих случаях я ищу два числа подряд разделенными каким-то символом.

Другой пример выражения с окончаниями. Шаблон для замены один, а склонения могут быть разными:

'первый' -replace 'первы[йм]','$0 снег'
'первым' -replace 'первы[йм]','$0 снегом'

 

...

Теги: #powershell


Каналы
Telegram FixMyPc Telegram Лента FixMyPC RSS Rss
Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, приобретённого опыта и лучшие практики в системном администрировании и программировании.