Powershell:提取2个字符串之间的数据,在目录中的最新文件中

问题描述 投票:0回答:1

我的powershell脚本应该执行以下操作:

  • 从目录中最新的日志文件中读取数据

  • 仅在桌面上的输出文件中输出相关数据。

此刻,每当文档中出现“ lobbyid”一词时,我都会得到整行。

我的代码:

Get-ChildItem -Path  "C:\Program Files\Example\logs" |Sort-Object LastAccessTime -Descending | Select-Object -First 1 | Select-String –Pattern "lobbyid"| Select Filename,Line | Format-Table -wrap | Out-File $env:USERPROFILE\Desktop\output.txt -append'

关于包含的日志文件

XXXXXXXXXXXXXXXXXXXXX
{"seqid":5,"lobbyid":"9A74E75D-2BCB-4750-BF3A-87BB4992DC2D","mm":{"status":7}
{"seqid":12,"lobbyid":"CFDAAA9C-F973-40CF-A477-143A5810061D","mm":{"status":10}
YYYYYYYYYYYYYYYYYYYYY

我知道

{"seqid":5,"lobbyid":"9A74E75D-2BCB-4750-BF3A-87BB4992DC2D","mm":{"status":7}
{"seqid":12,"lobbyid":"CFDAAA9C-F973-40CF-A477-143A5810061D","mm":{"status":10}

但是我想要输出

    Line 1: 9A74E75D-2BCB-4750-BF3A-87BB4992DC2D
    Line 2: CFDAAA9C-F973-40CF-A477-143A5810061D

或类似的东西。我尝试用'lobbyid(。*?)mm'替换“ lobbyid”但这给出了相同的输出。

string powershell logging design-patterns output
1个回答
0
投票

看来您的日志文件行包含JSON文本,因此您可以尝试以下操作(它不包含行号,正如您在后续评论中所述,该行号并不重要):] >

Get-ChildItem -Path  'C:\Program Files\Example\logs' |
  Sort-Object LastAccessTime -Descending |
    Select-Object -First 1 | 
      Select-String –Pattern lobbyid |
        ForEach-Object { ($_.Line | ConvertFrom-Json).lobbyid }

您的示例日志行缺少结尾的}作为有效的JSON,因此,如果实际数据中确实如此,请改用$_.Line + '}'

© www.soinside.com 2019 - 2024. All rights reserved.