过滤由日期时间字段分隔的多行

2024-03-29 10:36:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个日志文件,它由一个日期时间字段分隔成多行,如下所示:

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...

日期时间总是从行首开始,但文本可以在同一行或跨多行。在PowerShell(或python)中,有没有一种简单的方法可以使用“sometext”对日期时间进行分组和过滤?提前谢谢!你知道吗

附言: 我只想说清楚,我想从上面过滤掉:

2016-06-06 08:21:46,591:sometext1234...This is what I want...
sometext...abcd1234

写下“这就是我想要的”


Tags: 文件方法文本is时间thiswhatwant
2条回答

对不起,我花了一段时间,但我终于明白了。非常感谢所有给我测试想法的人。尽管,@TravisEz13的convertfrom字符串几乎是我想要的,而且我在其他应用程序中也使用过它,非常有用,但我没有在这个案例中使用它。我最终读取了带有get content的文件,但在select string有一个选项-context之前我不知道。所以我设定了很大的界限(有点作弊),而且成功了。代码如下:

gc "C:\abc.txt" | select-string '\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}' -Context 0,100 | ?{$_ -match "whatever"}

PowerShell ^{}可以获取模板并将数据转换为结构输出。您可能需要根据实际数据调整模板。

示例

$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...      

相关问题 更多 >