我有一个由日期时间字段分隔的多行日志文件,如下所示:
2016-06-06 07:26:46,038: sometext...
sometext...
sometext...
sometext...
2016-06-06 08:21:46,591:sometext1234...This is what I want...
sometext...abcd1234
2016-06-06 09:06:47,003: sometext...
2016-06-06 09:16:46,957: sometext...
sometext...
sometext...
日期时间始终从行的开头开始,但文本可以在同一行或跨越多行。是否有一种简单的方法可以使用" sometext"来分组和过滤日期时间。在PowerShell(或python)?提前谢谢!
PS: 为了清楚起见,我想从上面过滤出来:
2016-06-06 08:21:46,591:sometext1234...This is what I want...
sometext...abcd1234
通过提供文本"这就是我想要的"
答案 0 :(得分:0)
PowerShell ConvertFrom-String
可以获取模板并将数据转换为结构输出。 您可能需要调整实际数据的模板。
$log = @"
2016-06-06 07:26:46,038: sometext...
sometext...
sometext...
sometext...
2016-06-06 08:21:46,591:sometext1234...This is what I want...
sometext...abcd1234
2016-06-06 09:06:47,003: sometext...
2016-06-06 09:16:46,957: sometext...
sometext...
sometext...
"@
$logTemplate = @"
{log*:{date:2016-06-06 07:26:46,038:}{message:sometext...}}
"@
$log | ConvertFrom-String -TemplateContent $logTemplate
log
---
{@{date=2016-06-06 07:26:46,038:; message= sometext...}}
sometext...
sometext...
sometext...
{@{date=2016-06-06 08:21:46,591:; message=sometext1234...This is what I want...}}
sometext...abcd1234
{@{date=2016-06-06 09:06:47,003:; message= sometext...}}
{@{date=2016-06-06 09:16:46,957:; message= sometext...}}
sometext...
答案 1 :(得分:0)
抱歉,我花了一段时间,但我终于明白了。非常感谢每个人,他给了我测试的想法。即使@TravisEz13的convertfrom-string几乎是我想要的,我确实在其他应用程序中使用它,非常有用,但我并没有在这种情况下使用它。我最后用get-content读取文件,但是在select-string有一个选项-context之前我还不知道。所以我在非常大(有点作弊)之后设置了线条,并且它起作用了。这是代码:
gc" C:\ abc.txt" | select-string' \ d {4} - \ d {2} - \ d {2} \ d {2}:\ d {2}:\ d {2}' - 上下文0,100 | ?{$ _ -match"无论如何"}