给出一个文本文件,我想替换两个给定单词之间的所有文本(跨多行)。
文本文件示例:
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
但是...没有运气!
答案 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