我有一个巨大的日志文件(大约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
的行。我应该在批处理文件中使用哪种正则表达式来仅提取已过滤的行并将它们导出到单独的日志文件中。
答案 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.*