我有一个日志文件,我使用get-eventlog cmdlet解压缩,这是一个输出示例:
index Time EntryType source InstanceID Message
000 xxxx error system 1111 host ip: 55.55.55.55
class: tropical
state: open
name: contractor_0001
000 xxxx error system 1111 host ip: 55.55.55.55
class: tropical
state: open
name: contractor_0002
000 xxxx error system 1111 host ip: 55.55.55.55
class: tropical
state: open
name: contractor_0003
000 xxxx error system 1111 host ip: 55.55.55.55
class: tropical
state: open
name: contractor_0004
基本上我需要文本列表中每个人的名字,或者只使用powershell输出,例如:
contractor_0001
contractor_0002
contractor_0003
contractor_0004
我只需要名字,没有其他信息。
答案 0 :(得分:4)
直接从事件日志中提取此信息会更简单:
Get-EventLog "System" -EntryType "Error" -InstanceId 1111 | % {
$_.Message -replace '[\s\S]*name:\s+(\S+)[\s\S]*','$1'
}
如果你只限于你所展示的文本文件,你可以试试Select-String
:
Select-String 'name:\s+(\S+)' input.txt | % { $_.Matches.Groups[1].Value }
答案 1 :(得分:0)
正如其他人所说,最好直接从日志文件中提取所需的信息。
然而,要回答你提出的问题,这就行了: -
(gc ("C:\yourpath\yourfile.txt")) -match 'name:\s' | foreach {$_.Split(":")[1].Replace(' ','')}
如果需要,可以将其传输到out-file以写入文件。
我的测试输出数据:
contractor_0001
contractor_0002
contractor_0003
contractor_0004