【问题标题】:Multiline "[redex]::match()" output displays as one line in powershell多行“[redex]::match()”输出在powershell中显示为一行
【发布时间】:2020-08-31 06:50:53
【问题描述】:

我正在使用[regex]::matches($string, $pattern) 搜索日志文件中两行之间的行。 我的文件(摘录):

-----end-----
AAA
BBB
CCC
-----start-----

我的代码:

$pattern = "-----end-----(.*?)-----start-----"
$string = Get-Content $input_file
$result = [regex]::matches($string, $pattern)
#Output one of the matches:
Write-Host ($result[0].Value + "`n")

输出:

AAABBBCCC

预期输出:

AAA
BBB
CCC

不知何故,它会沿着行丢失换行符,这使得输出(匹配模式之间的许多行)几乎不可读。有什么办法解决吗?

【问题讨论】:

  • 如何初始化$result
  • @WiktorStribiżew 抱歉,错过了代码中的那一行。已添加

标签: regex powershell match


【解决方案1】:

您可以通过使用来解决此问题

$pattern = "(?s)-----end-----(.*?)-----start-----"
$string = Get-Content $input_file -Raw
$result = [regex]::match($string, $pattern)
Write-Host ($result.Value + "`n")

注意:

  • (?s) 使 . 匹配任何字符,包括换行符
  • Get-Content $input_file -Raw 将所有文件内容作为带有换行符的单个变量获取
  • [regex]::match 获取找到的第一个匹配项

【讨论】:

  • 太棒了。通过更改正则表达式模式并添加 -Raw 选项,它可以准确地输出我需要的内容。谢谢!
  • @miguello 太好了,请考虑接受答案。
  • 好的,我现在找到了 - 它是投票箭头下方的复选标记。 :) 找不到如何接受作为答案,认为投票就足够了。对不起:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多