我正在尝试使用 powershell 查看特定字符串的日志文件,并且只将它的最后一个实例返回到一个变量中以供以后使用。
日志示例:
09/07/17 13:27:19.858 TCP/IP Terminal.GetVersionInfo AppVersion [RA 4.0.560]
09/07/17 13:27:19.858 TCP/IP Terminal.GetVersionInfo OSVersion [L5x-OS-v00.00-20170000-0]
09/07/17 13:27:19.858 TCP/IP Terminal.GetVersionInfo PackingListVersion [0001]
09/07/17 13:27:19.858 TCP/IP Terminal.GetVersionInfo TerminalName [LXXXX_PCI3]
09/07/17 16:28:17.300 TCP/IP Terminal.GetVersionInfo AppVersion [RA 4.0.561]
Run Code Online (Sandbox Code Playgroud)
只是 AppVersion 的最后一个结果是我想要返回的:
[RA 4.0.561]
编辑:
我试图遍历每一行并将结果放入一个数组中,但该数组给了我奇怪的结果:
$results = @()
foreach ($line in $logfile) {
$hits = [regex]::match($line,'\[RA.\d.*]')
$results += $hits.Value
}
$results
Run Code Online (Sandbox Code Playgroud)
LotPings 的回答很有希望,但有一种更简单的方法可以做到,而无需辅助。多变的:
Select-String ' AppVersion\s+(\[.+?\])' $logfile |
Select-Object -Last 1 |
ForEach-Object { $_.Matches[0].Groups[1].Value }
Run Code Online (Sandbox Code Playgroud)
鉴于根据定义最多只有 1 场比赛,我们也可以这样做:
(Select-String ' AppVersion\s+(\[.+?\])' $logfile | Select-Object -Last 1).
Matches[0].Groups[1].Value
Run Code Online (Sandbox Code Playgroud)
如果在选择最后一个之前先收集内存中的所有匹配项是可行的:
(Select-String ' AppVersion\s+(\[.+?\])' $logfile)[-1].Matches[0].Groups[1].Value
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5852 次 |
| 最近记录: |