如何在Windows批处理文件中使用正则表达式查找特定模式?

时间:2017-11-30 07:27:34

标签: regex windows batch-file word-boundary

要求:            解析文本文件,需要将特定的行模式提取到另一个文件。在输出文件中,我只需要带有日期后跟ERROR的行。

批处理文件代码:

findstr /r "^\\d{4}-\\d{2}-\\d{2}\\s+\\d{2}:\\d{2}:\\d{2},\\d{3} \<ERROR.*" server.log > "%CD%"/test.txt
pause

输入文件: Sample.log

2017-11-28 00:40:16,791 ERROR [org.jboss.weld.Bean] (ServerService Thread Pool -- 269) WELD-000019: Error destroying an instance 
2017-11-28 00:40:16,791 INFO  [stdout] (ServerService Thread Pool -- 269) [ERROR][faces context is null in context utils1]
2017-11-28 00:40:16,791 INFO  [stdout] (ServerService Thread Pool -- 269) [ERROR][faces context is null in context utils1]
2017-11-28 00:40:16,791 ERROR [org.jboss.weld.Bean] (ServerService Thread Pool -- 269) WELD-000019: Error destroying an instance
2017-11-28 00:40:16,791 INFO  [stdout] (ServerService Thread Pool -- 269) [ERROR][faces context is null in context utils1]
2017-11-28 00:40:16,791 INFO  [stdout] (ServerService Thread Pool -- 269) [ERROR][faces context is null in context utils1]

预期产出:

2017-11-28 00:40:16,791 ERROR [org.jboss.weld.Bean] (ServerService Thread Pool -- 269) WELD-000019: Error destroying an instance 
2017-11-28 00:40:16,791 ERROR [org.jboss.weld.Bean] (ServerService Thread Pool -- 269) WELD-000019: Error destroying an instance 

但是目前代码返回输出文件中的所有内容。 试过边界也是如此。

1 个答案:

答案 0 :(得分:3)

FINDSTR /b /r "....-..-.....:..:..,....ERROR" "%filename1%

其中filename1包含您的sourcefilename应该完成任务,因为findstr限制了正则表达式的实现。