【问题标题】:regex select multilines in powershell正则表达式在Powershell中选择多行
【发布时间】:2023-01-12 00:53:47
【问题描述】:

我创建了一个这样的文件

echo "test 1", Hello, foo, bar, world, "test 2" > test.txt

结果是这样的:

test 1
Hello
foo
bar
a better world
test 2

我需要删除所有以关键字“Hello”开头并以“world”结尾的文本,包括这两个关键字。

像这样的东西

test 1
test 2

我试过了

$pattern='(?s)(?<=/Hello/\r?\n).*?(?=world)'
(Get-Content -Path .\test.txt -Raw) -replace $pattern, "" | Set-Content -Path .\test.txt

但什么也没发生。 我可以尝试什么?

【问题讨论】:

  • 看起来你可以用-replace '(?s)\s*Hello.*world'来做
  • @Leo 你的帖子说“文字之间关键词”,请update your question反映你真正想要的
  • 干得好,@Santiago - 我建议将其作为答案发布(唯一值得一提的考虑因素是 .* 是否应该贪婪)。
  • 谢谢@mklement0 但老实说我仍然不清楚 OP 想要什么
  • @MathiasR.Jessen,抱歉,我很困惑:是的,我的回答删除了关键字,因为我相信这是 OP 的意图(“包括两个关键字”)。

标签: regex string powershell


【解决方案1】:

撇开你的正则表达式中有多余的 / 不谈,将其重新表述如下:Santiago Squarzon 致敬。

$pattern = '(?sm)^Hello
?
.*?world
?
'

(Get-Content -Path .	est.txt -Raw) -replace $pattern | 
  Set-Content -Path .	est.txt

这将删除以 Hello 开头的行,一直到以 world 结尾的后续行,包括下一个换行符。 这会产生所需的输出,如您的问题所示。

【讨论】:

  • 我认为 OP 不想删除 Helloworld
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多