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

时间:2016-04-19 08:17:49

标签: powershell

我正在尝试查看日志文件中出现的单词(" Purge")。 我想显示最后10个匹配的行(在命令运行时)并继续观察文件以查找符合条件的新附加行。

到目前为止,我使用PowerShell

get-content .\CallAudit.Engine.log -tail 10 -Wait | where {$_ -match "Purge"}

这可行,但它获取最后(任意)10行,然后才应用过滤器。

我想

  • 仅获取匹配最后10行
  • 让命令继续观看文件。

可以这样做吗?

2 个答案:

答案 0 :(得分:5)

-Tail 10无法帮助您,因为您的purge过滤器在读取了最后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"}

答案 1 :(得分:2)

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

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

  • &/ - 过滤行(与where-object .... match相同)
  • F - 永远前进(与gc .. -Wait -Tail相同)

如果您的文件是log.txt,并且您需要监控数字,那么这就是命令:

less.exe +"&[0-9]+`nF"  log.txt

这是输出的样子: enter image description here

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

less.exe +"&^ERROR`nF" build.log

你可以从巧克力中获得更少:cinst less

在这里使用less over powershell的好处是:

  • 跨平台
  • less是非常强大的并且被许多windows工具使用,例如git,powershell社区扩展等。在你的工具库中有这样的工具很好。