正则表达式匹配并替换或删除Powershell中的多行文本

时间:2019-06-11 15:04:37

标签: powershell

我必须使用Power Shell删除第一行和最后一行已知的文本块。我应该怎么做?

首先,我尝试首先匹配整个文本块,然后它起作用了……直到有人更改了中间行。现在,我正在尝试使用某种正则表达式。 该块始终以“#START”行开始,以“#STOP”行结束。

我编写了标准正则表达式,正在处理所需的文本,我用https://regexr.com/进行了测试。

    (Get-Content .\file.conf -Raw) | % {
        $_ -replace "# START(.*\n)*# STOP", ''
    } | Set-Content .\file.conf

当我尝试以上面显示的方式使用Powershell时,它与任何内容都不匹配,我也不知道为什么。 我的问题有更好的解决办法吗?

这是示例文件内容。

# Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 
# Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. 
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

# START
# Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 
# Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. 

Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 

# STOP

# Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ```

1 个答案:

答案 0 :(得分:0)

根据您的示例文字,regEx应该如下所示:

$file = "C:\PowershellScripts\test.txt"    
$data = Get-Content $file -Raw    
$data -replace "# START[\r\n\#\,\.\sA-Za-z]*# STOP",""