Powershell多行正则表达式捕获和替换

时间:2019-01-02 22:00:33

标签: regex powershell

我环顾四周,没有找到这种特定格式,请伸出这里。

我有一个有趣的格式文件。我正在尝试制定一个正则表达式来替换文本。

所以我有一个格式如下的文件。

我唯一感兴趣的部分是[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 :(得分:0)

那只是在PowerShell中使用positive lookbehind

的一个衬里
(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,任意数量的空格,等号,任意数量的空格。