我正在尝试搜索包含跨多行的日志条目的日志文件。示例:
BEGIN
...
123456
...
END
BEGIN
...
456789
...
END
我想搜索一个特定的数字(123456),但要打印从前面的BEGIN标记到END标记的所有内容。如何在PowerShell中完成此操作?
我尝试了几种正则表达式,但是还没有使用。到目前为止,我的代码是:
$id = '123456'
$pattern = 'BEGIN(.|\s)*?'+$id+'(.|\s)*?END'
$matches = Select-String -Path "C:\temp\logile.log" -Pattern $pattern
不确定为什么这不起作用。还有其他方法可以使它起作用吗?
答案 0 :(得分:0)
我想是因为您想要一个必须包含换行符的正则表达式,也许可以将Get-Content
与-raw
开关一起使用。我已经包括了搜索文本前后必须有换行符,以避免部分匹配。
$id = '123456'
$pattern = '(?<=BEGIN)(.|[\n\r])+?\r\n' + $id + '\r\n(.|[\n\r])+?(?=END)'
[regex]::Match((Get-Content "C:\temp\logile.log" -Raw), $pattern).value
答案 1 :(得分:0)
foreach ($Section in (Get-Content C:\temp\logile.log -raw) -split '(?<=END\r?\n?)' -ne ''){
if($section -match '123456'){
$Section
}
}
示例输出:
BEGIN
...
123456
...
END