#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