Powershell 中带有上下文的尾部模式

Powershell 中带有上下文的尾部模式

如果我跟踪这样的日志:

gc xxx.log -last 1 -wait | sls -patt 'Exception' -simple | % {write $_.Context.PreContext $_.Line $_.Context.PostContext}

它按预期工作,输出包含“Exception”的行,但是当我尝试添加如下一些上下文时:

gc xxx.log -last 1 -wait | sls -patt 'Exception' -simple -cont 1,2 | % {write $_.Context.PreContext $_.Line $_.Context.PostContext}

..它只是以相同的方式工作,它不包含任何上下文行。有人能告诉我为什么以及我该怎么做才能获得这样的上下文行吗?

答案1

...它只是以相同的方式工作,它不包含任何上下文行。

因为没有上下文!您已明确指示Get-Content使用 来抓取1最后一行-Last 1,因此Select-String仅接收一行。

谁能告诉我为什么以及我该怎么做才能获得这样的上下文线?

当然,您要做的就是增加Last参数的行数。假设您1在正则表达式中匹配行,并且希望在其1前后添加行2( -Context 1,2),则总行数将是1 + 1 + 2 = 4

Get-Content -Path 'xxx.log' -Tail 4 |
    Select-String -Pattern 'Exception' -SimpleMatch -Context 1,2 |
        ForEach-Object {
            $_.Context.PreContext
            $_.Line
            $_.Context.PostContext
        }

相关内容