Powershell:显示符合条件的日志的最后X行,并继续监视该文件

Powershell:显示符合条件的日志的最后X行,并继续监视该文件,powershell,Powershell,我试图查看日志文件中出现的单词(“清除”)。 我想显示最后10行匹配的行(在命令运行时),并继续监视文件中新添加的符合条件的行 到目前为止,我在PowerShell中找到了一些东西: get-content .\CallAudit.Engine.log -tail 10 -Wait | where {$_ -match "Purge"} 这是可行的,但它得到最后(任意)10行,然后才应用过滤器 我想 仅获取匹配的最后10行 让命令继续监视文件 可以这样做吗?-Tail 10对您没有帮助,因

我试图查看日志文件中出现的单词(“清除”)。 我想显示最后10行匹配的行(在命令运行时),并继续监视文件中新添加的符合条件的行

到目前为止,我在PowerShell中找到了一些东西:

get-content .\CallAudit.Engine.log -tail 10 -Wait | where {$_ -match "Purge"}
这是可行的,但它得到最后(任意)10行,然后才应用过滤器

我想

  • 仅获取匹配的最后10行
  • 让命令继续监视文件

可以这样做吗?

-Tail 10
对您没有帮助,因为您的
purge
-filter是在读取最后10行之后执行的(可能包含也可能不包含
purge

我会把这个分成两个电话。一个用于列出最后10个值,另一个用于监视

Get-Content -Path .\CallAudit.Engine.log | Where-Object {$_ -match "Purge"} | Select-Object -Last 10
Get-Content -Path .\CallAudit.Engine.log -Wait -Tail 0 | Where-Object {$_ -match "Purge"}

只需为作业使用正确的工具,即
less.exe
。它最常用作寻呼机(相当于Windows上的
more
),但它是一个非常棒的工具,可以用来快速检查文件并监视它们

对于您的情况,您需要使用以下较少的选项:

  • &/
    -筛选行(与
    中的对象匹配相同
  • F
    -永远向前(与
    gc.-等待-Tail
    相同)
如果您的文件是
log.txt
,并且只需要监视数字,则此命令为:

less.exe +"&[0-9]+`nF"  log.txt
这是输出的样子:

更改
[0-9]+
以匹配您的模式,并保留所有其他内容。另一个例子,只需实时显示构建错误并隐藏其他所有内容

less.exe +"&^ERROR`nF" build.log
你可以从巧克力中得到更少的巧克力:
cinst less

在纯powershell上使用较少的资源的好处如下:

  • 跨平台
  • less功能非常强大,许多windows工具都使用它,如git、powershell社区扩展等。在您的武库中有这样的工具很好

+1获取信息,对开发人员非常有用。我的场景涉及到RDP到可能的生产机器,可能是客户的机器,因此安装第三方工具(Chocolate+软件包)可能是不需要的,或者根本不可能的。这就是为什么我更喜欢PS——或者使用“内置”工具的任何其他解决方案。您可以将less.exe复制到生产环境中,或者直接从共享环境中使用它。这是一个单文件~100KB.Nice,看起来很“常识”。有没有一种方法可以将两个结果列表连接起来,使之成为“一行”?为什么?我们的想法是首先将它们分开,以避免过度复杂的
,其中
/
foreach
-循环来实现简单的事情。可读性应始终优先考虑。:-)如果您确实需要在一行中添加它,请添加
在第一行之后结束当前命令/行并连接行。例<代码>获取内容在哪里选择-最后10;获取内容-等待|在哪里为什么?因为我对语法很好奇:)这就是我添加解决方案的原因(用
连接行)。但是,它的运行方式与使用换行符时的运行方式相同。:-)