![Возвращение номера строки совпадающей подстроки в пакетном режиме](https://rvso.com/image/1469482/%D0%92%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D0%B0%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20%D1%81%D0%BE%D0%B2%D0%BF%D0%B0%D0%B4%D0%B0%D1%8E%D1%89%D0%B5%D0%B9%20%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8%20%D0%B2%20%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BD%D0%BE%D0%BC%20%D1%80%D0%B5%D0%B6%D0%B8%D0%BC%D0%B5.png)
Я хочу вернуть номер строки в файле, который всегда имеет один и тот же префикс, но остальные могут отличаться.
Возможно ли выполнить поиск файла, используя только стандартные компоненты Windows и служебные программы командной строки, чтобы вернуть номер строки совпадающей части?
Пример строки, которую я ищу:
</TR></TABLE><TABLE cellspacing...
Дополнительный код, который может отличаться
Строка в файле является выводом генератора, поэтому я не уверен, что изменилось или может измениться каждый раз, когда он генерирует файл.
решение1
FINDSTR используется для поиска текста в файле, распечатывая каждую строку, которая соответствует поиску. Опция /N
заставляет номер строки добавляться к каждой соответствующей строке вывода в виде LineNumber:FullTextOfMatchingLine
.
Поскольку строка поиска содержит пробел, необходимо использовать эту /C:"search string"
опцию, в противном случае строка поиска будет интерпретироваться как несколько поисковых терминов, разделенных пробелом.
Вы хотите, чтобы поиск соответствовал только началу строки, поэтому вам нужна эта /B
опция. В качестве альтернативы вы можете добавить опцию, /R
чтобы обрабатывать поиск как регулярное выражение, а затем использовать ^
якорь начала строки в начале строки поиска.
findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"
Вы запрашиваете только номер строки, без текста соответствующей строки. Вы можете использовать FOR /F для извлечения нужного номера строки(й).
for /f "delims=:" %A in ('findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"') do @echo %A
Если вы помещаете команду в пакетный файл, то вам необходимо удвоить проценты:
@echo off
for /f "delims=:" %%A in ('findstr /b /c:"</TR></TABLE><TABLE cellspacing" "yourFile.htm"') do echo %%A
решение2
Используйте findstr /N strings filename
для поиска вхождений strings
в файле filename
.
Примечание: /N
«Печатает номер строки перед каждой совпадающей строкой»
Для получения дополнительной информации об использовании запуститеfindstr /?