跨多行替换两个单词之间的文件文本

时间:2018-10-29 15:04:20

标签: regex powershell replace

给出一个文本文件,我想替换两个给定单词之间的所有文本(跨多行)。

文本文件示例:

line1
line2
XstartX
line4
XendX
line5

如果我想将startend之间的所有文本替换为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 :(得分:1)

如评论中所述,您需要启用s修饰符以使.+?部分也与换行符匹配。
正如Ansgar提到的,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