1

Тема: CMD/BAT: Поиск строки в файле и вывод ещё трёх строк за ней

В текстовом файле надо найти заданную строку и записать следующие за ней три строки.
Таких заданных строк может быть много в файле.
Команда Find /N test.txt "строка поиска" выводит:

[271426]  строка поиска
.........................................
[340856] строка  поиска

Если такой ключ /N задан в этой команде, то, наверное, выводимый номер строки  можно использовать
в других командах?

Как можно вывести одним блоком строку поиска+три следующие за ней строки?
Желательно, в оболочке CMD, если возможно.

2 (изменено: Yury, 2016-12-19 23:29:58)

Re: CMD/BAT: Поиск строки в файле и вывод ещё трёх строк за ней

@echo off

:: Выставляем нужное число строк для вывода после искомой:
set k=3

for /f %%i in ('find /c /v ""^<"test.txt"') do set l=%%i
(
    for /l %%i in (1 1 %l%) do (
        set string= 
        set /p string=
        call set /p="%%string%%"<nul| findstr /x /c:"строка поиска" /c:"строка  поиска"&& set m=%%i
        for /l %%j in (1 1 %k%) do (
            if defined m (
                set /a n=m+%%j
                call echo %%n%%| findstr /x %%i>nul&& if defined string (
                    call set /p="%%string%%"<nul
                    echo.
                )
            )
        )
    )
)<"test.txt">"new.txt"

3

Re: CMD/BAT: Поиск строки в файле и вывод ещё трёх строк за ней

Yury, большое спасибо за ответ на мой вопрос.

4

Re: CMD/BAT: Поиск строки в файле и вывод ещё трёх строк за ней

У меня точно такая же проблема, единственное строка не постоянная, а попадает под регулярное выражение @SR.*70 К сожалению с батниками дел не имел и что тут надо исправить не понимаю

5 (изменено: Yury, 2016-12-19 23:36:37)

Re: CMD/BAT: Поиск строки в файле и вывод ещё трёх строк за ней

NKata пишет:

...строка не постоянная, а попадает под регулярное выражение...

Регулярное выражение для команды "FINDSTR"?

6 (изменено: Yury, 2016-12-19 23:39:23)

Re: CMD/BAT: Поиск строки в файле и вывод ещё трёх строк за ней

Yury пишет:

Регулярное выражение для команды "FINDSTR"?

Очевидно, я не выспался.


NKata пишет:

...надо исправить...

Попробуйте заменить строку

        call set /p="%%string%%"<nul| findstr /x /c:"строка поиска" /c:"строка  поиска"&& set m=%%i

на строку

        call set /p="%%string%%"<nul| findstr /r /c:"@SR.*70"&& set m=%%i

.

7

Re: CMD/BAT: Поиск строки в файле и вывод ещё трёх строк за ней

Все отлично) Спасибо огромное!

8

Re: CMD/BAT: Поиск строки в файле и вывод ещё трёх строк за ней

Добрый день!
Необходимо то же самое, только скопировать  предыдущую строку, чтобы из данных

Guid            : {FC6F5412-A9B9-48D2-8365-26FC8046EC79}
Name            : Local Area Connection 2
Guid            : {B69F5DB8-0530-4C8D-9E4E-BC4FD5D803EC}
Name            : Local Area Connection

В файл записалось в правильном порядке:

{B69F5DB8-0530-4C8D-9E4E-BC4FD5D803EC}
{FC6F5412-A9B9-48D2-8365-26FC8046EC79}