многострочное регулярное выражение PowerShell для захвата и замены - PullRequest
0 голосов
/ 03 января 2019

Я огляделся, не нашёл этот конкретный формат, потянулся сюда.

У меня есть файл, который отформатирован забавно.Я пытаюсь сформулировать выражение регулярного выражения для замены текста.

Итак, у меня есть файл, который отформатирован, как показано ниже.

Единственная часть, которая меня интересует, это блоки [ash01], [ask02] и т. д.

Я хотел бы получить весь этот блок, изменить только имя FTP-сервера, а затем записать файл обратно.До:

[ash01]
FTP Server Name     = ftp-server-01
ftp parameter1      = C:\scripts
ftp parameter2      = -t

После:

[ash01]
FTP Server Name     = ftp-server-05
ftp parameter1      = C:\scripts
ftp parameter2      = -t

Сам файл имеет некоторые неформатированные данные выше и ниже рассматриваемого блока, затем он начинает попадать в группы, подобные ниже

Unformatted data......
[blah]

[ash01]
FTP Server Name     = ftp-server-01
ftp parameter1      = C:\scripts
ftp parameter2      = -t

[ash02]
FTP Server Name     = ftp-server-02
ftp parameter1      = C:\scripts
ftp parameter2      = -t

[ash03]
FTP Server Name     = ftp-server-03
ftp parameter1      = C:\scripts
ftp parameter2      = -t

[blah]
unformatted data.....

1 Ответ

0 голосов
/ 03 января 2019

Это всего лишь один вкладыш в PowerShell, использующий позитивный взгляд

(Get-Content .\yourfile.txt -raw) -replace "(?SMI)(?<=^\[ash01\]`r?`nFTP Server Name *= *).*?$","ftp-server-05"| Set-Content .\newfile.txt

[] необходимо экранировать с помощью обратной косой черты, чтобы не интерпретировать как диапазон.
(?SMI) дать команду RegEx для совпадения ^* начало / конец строки и многострочный и игнорировать регистр.

В итоге весь текст до конца строки заменяется IF
тексту предшествуют [ash01], cr / lf, FTP Server Name любое количество пробелов, знак равенства любое количество пробелов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...