【发布时间】:2019-04-02 13:13:55
【问题描述】:
给定一个文本文件,我想替换两个给定单词之间的所有文本(跨多行)。
文本文件示例:
第1行 线2 XstartX 第 4 行 XendX 第 5 行如果我想用YYY 替换start 和end 之间的所有文本
结果文件应该是
我试过了
$file='C:\Path\to\file.txt'
$raw = Get-Content $file -Raw
$raw -ireplace '(?<=start).+?(?=end)', 'YYY'
$raw | Set-Content $file
但是...没有运气!
【问题讨论】:
-
试试
$raw -ireplace '(?sm)(?<=start).+?(?=end)', 'YYY'您还需要将更改后的值设置为var,此时您刚刚输出到屏幕。 -
它有效!我错过了
(?sm),请您解释并回答,以便我选择它作为正确答案? -
我还注意到我遗漏了一些东西......脚本的第 4 行应该是
$raw = $raw -ireplace '(?sm)(?<=start).+?(?=end)', 'YYY' -
(?s)就足够了。.通常不匹配换行符,因此如果没有(?s)修饰符,您的表达式将不会匹配多行文本。或者,您可以使用[\s\S]+?而不是.+?来匹配任何字符(包括换行符)。 -
真的,
(?s)就够了!.即使有多行也能正常工作
标签: regex powershell replace