Удалите текст перед определенной строкой, включая строку, с помощью пакетной команды.

Вопрос или проблема

У меня есть текстовый файл, в котором миллионы строк. Я хочу удалить весь текст перед строкой test: включая эту строку. Также хочу удалить текст после пробела.

Некоторое содержимое файла:

file1:test:src/draw/no/ind/erefe.c/gegegewg 1
filesdsd:test:src/draw/no/ind/reryeryrey.c/jhrtjtrj 1
fileskdk:sdsD:test:abc/disp/no/ind/ryretyrey.txt/Display::Restrict 20

Желаемый вывод:

src/draw/no/ind/erefe.c/gegegewg
src/draw/no/ind/reryeryrey.c/jhrtjtrj
abc/disp/no/ind/ryretyrey.txt/Display::Restrict

У меня есть следующий код, который удаляет текст после / из файла и также выводит строки в командной строке, так как в нем есть echo.

for /f "tokens=1 delims=/" %a in (abc.txt) do (echo %a >> newfile.txt)

Я хочу изменить вышеупомянутый код, чтобы получить желаемый вывод. Но без вывода строк в командной строке, так как это занимает много времени.

Вот ваша команда:

cut -d " " -f1 file.txt | sed -e '1,$s/^\(.*\):test:\(.*\)$/\2/' > new_file.txt

или если вы можете изменить оригинальный файл:

sed -i '1,$s/^\(.*\):test:\(.*\) .*$/\2/' file.txt

Обновление: Я не заметил, что вопрос был для платформы Windows. Однако sed также существует для Windows, который можно установить несколькими способами:

https://stackoverflow.com/questions/127318/is-there-any-sed-like-utility-for-cmd-exe

Ответ или решение

Удаление текста до определенной строки в файле на Windows с помощью командной строки

Если у вас есть текстовый файл с миллионами строк, и вы хотите удалить весь текст перед строкой test: (включая саму строку), а также удалить текст после пробела, вы можете использовать командный файл (batch file) в Windows для достижения этой цели. Метод, который описан ниже, позволит вам выполнить эту задачу эффективно, экономя ресурсы и время.

Подход с использованием командной строки Windows

Вы можете использовать цикл for и встроенные возможности командной строки для обработки вашего файла. Ниже приведен пример кода, который может справиться с поставленной задачей:

@echo off
setlocal enabledelayedexpansion

REM Укажите имя входного файла и выходного файла
set "inputFile=abc.txt"
set "outputFile=newfile.txt"

REM Очистить выходной файл, если он существует
> "%outputFile%" (

REM Чтение входного файла построчно
for /f "usebackq delims=" %%a in ("%inputFile%") do (
    REM Найти позицию строки 'test:'
    set "line=%%a"
    set "modifiedLine=!line:*test:=!"
    REM Удалить текст после первого пробела
    for /f "tokens=1*" %%b in ("!modifiedLine!") do (
        echo %%b >> "%outputFile%"
    )
)
)

endlocal

Объяснение кода

  1. Инициализация:

    • Ключ @echo off отключает вывод команд в консоль, так что вы не будете видеть промежуточные результаты. Это помогает повысить производительность при работе с большим объемом данных.
    • Команда setlocal enabledelayedexpansion позволяет использовать переменные в блоках for.
  2. Настройка файлов:

    • Переменная inputFile содержит имя входного текстового файла (замените abc.txt на ваш файл).
    • Переменная outputFile задает имя выходного файла, в который будут записаны результаты.
  3. Очистка выходного файла:

    • > "%outputFile%" очищает файл или создает новый, если он не существует.
  4. Чтение входного файла:

    • Цикл for /f читает файл построчно, причем usebackq позволяет использовать кавычки для имен файлов, которые могут содержать пробелы.
    • set "line=%%a" хранит текущую строку в переменной line.
  5. Удаление текста до test::

    • set "modifiedLine=!line:*test: =!" удаляет все до строки test: (включительно).
  6. Удаление текста после пробела:

    • Вложенный цикл for используется для разделения строки по пробелу. Команда tokens=1* позволяет сохранить первую часть строки до пробела в переменной %%b и всё остальное в %%c, если это необходимо.
  7. Запись результата:

    • Команда echo %%b >> "%outputFile%" записывает обработанную строку в выходной файл.

Заключение

Данный способ является эффективным и надежным методом для обработки больших текстовых файлов в Windows. Используя команды командной строки, вы можете быстро и без значительных затрат ресурсов удалить ненужные данные из строк. Запись результата в новый файл обеспечивает сохранение исходных данных, что важно для предотвращения потерь информации.

Для повышения производительности рекомендуется запускать скрипт на компьютере с достаточным объемом оперативной памяти и мощным процессором, особенно если файл содержит миллионы строк.

Оцените материал
Добавить комментарий

Капча загружается...