Я хочу вернуть номер строки в файле, который всегда имеет один и тот же префикс, но остальные могут отличаться.
Возможно ли выполнить поиск файла, используя только стандартные компоненты 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 /?