Поиск с регулярным выражением

#regex #batch-file #dos

#регулярное выражение #пакетный файл #dos

Вопрос:

У меня есть файл системного журнала, подобный следующему:

 </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 with 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 не принимает обычное регулярное выражение ( t s n …), Поэтому я разделил его на 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%
 

Что для этого задания требовалось использовать только пакет dos (это печально, но не может измениться), есть ли какой-нибудь способ просто использовать синтаксис findstr? Спасибо

Ответ №1:

Только один 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].*"
 

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

Комментарии:

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