2014-06-25 4 views
0

У меня есть файл журнала система, как следующее:Findstr с регулярным выражением

</t>Processed 8 rows.<LF> 
</t>Success: 8<LF> 
</t>Skip:  0<LF> 
</t>Error:  0<LF> 
</t>Exceptions: 0<LF> 

// other log details 

</t>Processed 8 rows.<LF> 
</t>Success: 6<LF> 
</t>Skip:  1<LF> 
</t>Error:  1<LF> 
</t>Exceptions: 0<LF> 

<\t> является символом табуляции, <LF> является линия подачи характера.

Моей работе необходимо создать пакет dos для изучения этих файлов и принять меры, если найдутся Skip, Error или Exceptions.

Что на мой взгляд, использует findstr с regular expression, чтобы найти какой-либо линии имеют дело безуспешными, я испытал это регулярное выражение:

// Should be one line here 
\t+Skip\:\s+([1-9]|[1-9][0-9])\n| 
\s+Error\:\s+([1-9]|[1-9][0-9])\n| 
\s+Exceptions\:\s+([1-9]|[1-9][0-9])\n 

Однако Findstr не принимают нормальное регулярное выражение (\ т \ s \ п ...), так что я разделить на 6 регулярное выражение:

findstr /rc:"Skip\:[ ]*[1-9]" %file% 
findstr /rc:"Skip\:[ ]*[1-9][0-9]" %file% 
findstr /rc:"Error\:[ ]*[1-9]" %file% 
findstr /rc:"Error\:[ ]*[1-9][0-9]" %file% 
findstr /rc:"Exceptions\:[ ]*[1-9]" %file% 
findstr /rc:"Exceptions\:[ ]*[1-9][0-9]" %file% 

что это задание необходимо использовать дос партию только (это печально, но не может измениться), сделать какой-либо способ просто синтаксис Findstr? Благодаря

ответ

0

только один findstr с все случаи соответствия

findstr /r /c:"Skip: *[1-9]" /c:"Error: *[1-9]" /c:"Exceptions: *[1-9]" input.txt 

findstr Два команд трубопроводных. Первый из них извлекает требуемые линии и второй ищет условия проблемы

findstr /l "Skip: Error: Exceptions:" input.txt | findstr /r /c:": *[1-9].*" 

Первый вариант выполняется быстрее, так как он включает только одну команду. Второй вариант менее резервный и менее подвержен ошибкам ввода.

+0

Действительно спасибо, я не знаю, что могу передать несколько '/ c' в findstr – Prisoner

Смежные вопросы