我正在尝试查看日志文件中出现的单词(" Purge")。 我想显示最后10个匹配的行(在命令运行时)并继续观察文件以查找符合条件的新附加行。
到目前为止,我使用PowerShell 。
get-content .\CallAudit.Engine.log -tail 10 -Wait | where {$_ -match "Purge"}
这可行,但它获取最后(任意)10行,然后才应用过滤器。
我想
可以这样做吗?
答案 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
更改[0-9]+
以匹配您的模式,并保留其他所有内容。另一个例子,只是实时显示构建错误并隐藏其他所有内容
less.exe +"&^ERROR`nF" build.log
你可以从巧克力中获得更少:cinst less
。
在这里使用less over powershell的好处是: