Regex Powershell,帮助读取日志文件以获取特定关键字

Regex Powershell,帮助读取日志文件以获取特定关键字,regex,powershell,Regex,Powershell,如何读取日志文件,从日期获取关键字fail和时间戳,然后将其打印到csv 示例:我有一个文件test.txt,其中包含 20160201-00:00:00 Success .. 20160201-11:11:11 Fail.. 我要一份所有失败的报告 Date Time Result ---------- 20160201 11:11:11 Fail 谢谢你的帮助 类似于: (gc log.txt) -match 'fail' | % {

如何读取日志文件,从日期获取关键字fail和时间戳,然后将其打印到csv

示例:我有一个文件test.txt,其中包含

20160201-00:00:00 Success ..
20160201-11:11:11 Fail..
我要一份所有失败的报告

Date          Time       Result
----------
20160201      11:11:11   Fail
谢谢你的帮助

类似于:

(gc log.txt) -match 'fail' | % { 
    $_ -match '^([^ ]+ )(.+)'
    $matches[1] + ',' $matches[2] | out-file -Append out.csv
}
这与您想要的非常接近,您只需稍微打磨一下即可。

类似于:

(gc log.txt) -match 'fail' | % { 
    $_ -match '^([^ ]+ )(.+)'
    $matches[1] + ',' $matches[2] | out-file -Append out.csv
}

这与您想要的非常接近,您只需要稍微润色一下。

首先必须使用cmdlet读取文本文件。要分析日志,可以使用以下正则表达式():

在下面的示例中,我使用cmdlet(别名
%
)迭代匹配项,并创建一个具有所需属性的新对象。 要仅筛选
失败
报告,可以使用cmdlet(别名
Where
)。 要将对象转换为CSV,可以使用cmdlet:


首先必须使用cmdlet读取文本文件。要分析日志,可以使用以下正则表达式():

在下面的示例中,我使用cmdlet(别名
%
)迭代匹配项,并创建一个具有所需属性的新对象。 要仅筛选
失败
报告,可以使用cmdlet(别名
Where
)。 要将对象转换为CSV,可以使用cmdlet:


在我们回答之前,OP至少应该表现出一些努力。可能有一个傻瓜接近这个标题,这实际上可能会有所帮助。这听起来像是一个给我密码的问题。如果用户确实是新用户,那么在尝试向人们展示该做什么时,应该避免使用别名。你也不会解释这些是怎么回事。如果他是新来的,最好使用别名,而不要使用别名。高级别名不是随机词,但在linux世界中有历史,他知道
ls
的概率更高,例如,他知道
get childitem
。OP还应该知道如何读取代码,否则它将毫无意义。我不想解释琐碎的代码。在我们回答之前,OP应该至少显示出一些努力。可能有一个傻瓜接近这个标题,这实际上可能会有所帮助。这听起来像是一个给我密码的问题。如果用户确实是新用户,那么在尝试向人们展示该做什么时,应该避免使用别名。你也不会解释这些是怎么回事。如果他是新来的,最好使用别名,而不要使用别名。高级别名不是随机词,但在linux世界中有历史,他知道
ls
的概率更高,例如,他知道
get childitem
。OP还应该知道如何读取代码,否则它将毫无意义。我不想解释琐碎的代码。向我们展示您的尝试,我们将非常乐意为您指明正确的方向。向我们展示您的尝试,我们将非常乐意为您指明正确的方向。出于某种原因,我得到了一个空文件。为了方便起见,这里是test.txt中的内容。20160401-01:10:00成功20160401-01:10:00失败20160401-01:10:00成功20160401-01:10:00失败…这对我有效,我获得了所需的输出..您收到任何错误吗?谢谢!它的工作原理是我与Regex有问题。:)谢谢你的帮助。由于某种原因,我得到了一个空文件。为了方便起见,这里是test.txt中的内容。20160401-01:10:00成功20160401-01:10:00失败20160401-01:10:00成功20160401-01:10:00失败…这对我有效,我获得了所需的输出..您收到任何错误吗?谢谢!它的工作原理是我与Regex有问题。:)谢谢你的帮助。
$content = Get-Content 'C:\Yourpathto\test.txt'
$regex = '(\d{8})-(\d{2}:\d{2}:\d{2})\s+(\w+)'
[regex]::Matches($content, $regex) | % {  
    [PSCustomObject]@{
            Date = $_.Groups.Value[1]
            Time = $_.Groups.Value[2]
            Result = $_.Groups.Value[3]
            }
 } | Where Result -eq 'Fail' | Export-Csv -Path c:\test.csv