Заменить текст файла между двумя словами в нескольких строках - PullRequest
0 голосов
/ 29 октября 2018

Учитывая текстовый файл, я хочу заменить весь текст (через несколько строк) между двумя данными словами.

Пример текстового файла:

line1
line2
XstartX
line4
XendX
line5

если я хочу заменить весь текст между start и end на YYY результирующий файл должен быть

line1
line2
XstartYYYendX
line5

Я пытался

$file='C:\Path\to\file.txt'

$raw = Get-Content $file -Raw
$raw -ireplace '(?<=start).+?(?=end)', 'YYY'
$raw | Set-Content $file

но ... не повезло!

1 Ответ

0 голосов
/ 29 октября 2018

Как упоминалось в комментариях, вам нужно включить модификатор s, чтобы часть .+? также соответствовала разрывам строки.
Как упоминает Ансгар, m здесь не обязателен, но может улучшить start путем привязки в строке, начинающейся с (?<=^xstart)

$file='C:\Path\to\file.txt'
$raw = Get-Content $file -Raw
$raw = $raw -ireplace '(?s)(?<=start).+?(?=end)', 'YYY'
$raw | Set-Content $file

или

$file='C:\Path\to\file.txt'
$raw = (Get-Content $file -Raw) -ireplace '(?s)(?<=start).+?(?=end)', 'YYY'
$raw | Set-Content $file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...