2

У меня есть файл example.txt и строка "Привет" и начало 15-й строки.

Требуемый код для findstr должен быть:

findstr /b /n "Hi" "example.txt"

Есть ли что-то, что может искать строку "Hi" только в заданной строке (здесь 15-й).

Пожалуйста помоги !

2 ответа2

1

Как использовать FINDSTR для поиска по определенной строке?

Требуемый код для findstr должен быть:

findstr /b /n "Hi" "example.txt"

Есть ли что-то, что может искать строку "Hi" только в заданной строке

Исходя из формулировки вашего вопроса, я собираюсь предположить несколько вещей:

  1. Вы хотите найти строку ТОЛЬКО и ничего более в конкретной строке
  2. Так как в вашем примере FINDSTR использует строку /B you, то есть "Hi", находится только в начале строки, а затем после нее следует пробел для другого слова и т.д.
  3. Поскольку в вашем примере используется ключ /N , я собираюсь предположить, что вы используете его только для печати строк, в которых найдены совпадающие строки, поэтому вы можете запустить команду FINDSTR чтобы получить ТОЛЬКО строку 15.

Вот несколько примеров команд (не пакетных) для выполнения этого

(Вы можете просто скопировать и вставить все эти строки после того, как ваша переменная будет подключена соответствующим образом для запуска, не будучи пакетным скриптом.)

SET SearchFile=C:\Path\example.txt
SET TmpSearchFile=%Temp%\~tmpSearch00.txt
SET String=Hi
SET LineNum=15

FINDSTR /B /N "%String%" "%SearchFile%" > "%TmpSearchFile%"
FOR /F "USEBACKQ TOKENS=2 DELIMS=: " %A IN (`"FINDSTR /B "%LineNum%:%String%" "%TmpSearchFile%""`) DO ECHO %~A

Это в основном передает первый FINDSTR с номером строки совпадающей строки в начале всех строк во временный файл (если он существует, он перезаписывается). Затем он ищет во временном файле строку номера строки, плюс двоеточие и строку (т. Е. «15: Привет»). После этого я использовал цикл FOR /F делающий colon и space delimiter с token 2 . Затем он будет ECHO строку ТОЛЬКО по запросу (замените ECHO другой командой, если необходимо).

0

Я бы не стал делать это с партией, но мог бы с Powershell.

Чтобы определить, началась ли 15-я строка файла со строки «Привет», я бы использовал:

if (Get-Content -Path x:\pathto\file.txt -First 15 `
    | Select-Object -Last 1 `
    | Select-String -Pattern '^Hi' -Quiet)
{
    # do my thing here...
}

Это должно гарантировать, что весь файл не читается, только первые 15 строк.

Конечно, 15-я строка произвольна. В зависимости от того, где вы действительно хотите посмотреть, вы можете настроить параметры на Get-Content и Select-Object чтобы уменьшить количество операций чтения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .