使用批处理命令从日志文件导出筛选的行

时间:2014-01-15 12:31:00

标签: regex batch-file cmd

我有一个巨大的日志文件(大约10MB - 20000行),其中包含以下示例数据行

081741.397 : Received:[8=FIX.4.4     9=68     35=0     34=157     49=CALUAT     52=20131216-08:17:41.239     56=FAUAT     10=232     ]
081749.587 : Send:[8=FIX.4.4     9=64     35=0     49=FAUAT     56=CALUAT     34=158     52=20131216-08:17:49     10=033     ]
081806.623 : Send:[8=FIX.4.4     9=583     35=AE     49=FAUAT     56=CALUAT     34=159     52=20131216-08:18:06     571=7CG8I6220131216     487=2     150=F]
081811.396 : Received:[8=FIX.4.4     9=68     35=0     34=158     49=CALUAT     52=20131216-08:18:11.239     56=FAUAT     10=231     ]
081815.920 : Send:[8=FIX.4.4     9=626     35=AE     49=FAUAT     56=CALUAT     34=160     52=20131216-08:18:15     571=9CG8IF220131216     487=2     150=F]
081824.173 : Send:[8=FIX.4.4     9=558     35=AE     49=FAUAT     56=CALUAT     34=161     52=20131216-08:18:24     571=11CG8I220131216     487=0     150=F]
081841.395 : Received:[8=FIX.4.4     9=68     35=0     34=159     49=CALUAT     52=20131216-08:18:41.239     56=FAUAT     10=235     ]
081858.539 : Send:[8=FIX.4.4     9=64     35=0     49=FAUAT     56=CALUAT     34=169     52=20131216-08:18:58     10=036     ]
081911.394 : Received:[8=FIX.4.4     9=68     35=0     34=160     49=CALUAT     52=20131216-08:19:11.239     56=FAUAT     10=225     ]
081919.303 : Send:[8=FIX.4.4     9=640     35=AE     49=FAUAT     56=CALUAT     34=170     52=20131216-08:19:19     571=27CG8J220131216     487=2     150=F]
081941.393 : Received:[8=FIX.4.4     9=68     35=0     34=161     49=CALUAT     52=20131216-08:19:41.239     56=FAUAT     10=229     ]  

我想只获取包含Send:35=AE的行。我应该在批处理文件中使用哪种正则表达式来仅提取已过滤的行并将它们导出到单独的日志文件中。

6 个答案:

答案 0 :(得分:2)

这将找到字符串“Send:”,后跟任何字符序列和字符串“35 = AE”,读取指示的输入文件并将输出发送到指示的输出文件

findstr /r /c:"Send:.*35=AE" inputFile > outputFile

要获取除指示之外的所有行,请将/v添加到findstr的参数列表中以反转匹配

编辑:删除<重定向器dbenham的解释(FINDSTR中的错误)

答案 1 :(得分:1)

你的问题不明确。

如果你想得到那些包含这些字符串BOTH的行,那么

find "Send:" filename|find "35=AE" >a_new_file.txt

如果你想获得这些字符串的那些行,那么

findstr /L "Send: 35=AE" filename >a_new_file.txt

在任何一种情况下,如果需要,添加/i开关以使搜索不区分大小写。

答案 2 :(得分:1)

试试这个

 findstr /R /I Send:\[.*35=AE.* search.log >> new.log

答案 3 :(得分:1)

您可以使用以下内容查找行并将其发送到新文件

FINDSTR发送。* 35 = AE a.txt> b.txt

答案 4 :(得分:1)

这是另一种选择,基于35=AE是唯一术语的评论。

find "35=AE" <"file.log" >"out.txt"

答案 5 :(得分:0)

要仅使用“发送”和“使用35 = AE”获取行

^\d{6}.\d{3} : Send.*35=AE.*