【问题标题】:Regexp match and replace or delete multiple lines of text in powershell正则表达式匹配并替换或删除powershell中的多行文本
【发布时间】:2019-06-11 15:04:37
【问题描述】:

我必须使用 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. ```

【问题讨论】:

  • 能否提供输入文件?
  • 我刚刚添加了示例文件,该文件也符合我的案例条件并在 regexr.com 中匹配
  • 看看this answer一小时前发布的内容
  • 它在这里工作。尝试为输出使用不同的文件名。
  • 根据你的行尾我会尝试:(Get-Content .\file.conf -Raw) | % {$_ -replace '\r?\n# START(.*\r?\n)*# STOP\r?\n'} 使用单引号和可选的 CR \r?

标签: powershell


【解决方案1】:

根据您的示例文本,正则表达式应该是这样的:

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

【讨论】:

    猜你喜欢
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2021-12-07
    • 2011-10-11
    相关资源
    最近更新 更多