Могу ли я записать регулярное выражение в командный файл в качестве поиска и замены для всех файлов?

В настоящее время я конвертирую docx в txt, используя приглашения pandoc в пакетном файле, и я хочу, чтобы пакетный файл также запускал поиск и замену преобразованных файлов, чтобы очистить их, вместо того, чтобы открывать их в notepad++ и запускать несколько команд find и заменяет вручную.

Попытка превратить 5-10-минутную работу в 2-минутную максимальную работу, правда, но я довольно незнакомый кодировщик.

Попытка запустить следующее:

FIND: \r\n
REPLACE: \r\n\r\n

FIND: STUDENT: [^\r\n]{1,200}
REPLACE: STUDENT:

FIND: _[A-z].{1,300}
REPLACE: [nothing] tick .matches new line

FIND: -{2,2000}
REPLACE: [nothing]

Если кто-то может помочь или, по крайней мере, указать мне в правильном направлении. У меня нет опыта в этом деле, кроме редактирования уже существующих пакетных файлов, чтобы заставить их делать то, что я хочу.

1 ответ1

1

Вы можете использовать JREPL.BAT для выполнения поиска / замены одного файла, а затем упаковать его в цикл FOR, чтобы применить его ко "всем" файлам.

JREPL.BAT - текстовый процессор командной строки с регулярными выражениями. Это чистый скрипт (гибридный JScript/batch), который запускается на любой машине с Windows начиная с XP, сторонние exe-файлы не требуются. Полная документация доступна из командной строки через jrepl /? или jrepl /?? для постраничной помощи.

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

В приведенном ниже коде используется параметр /T (перевод), который позволяет указать серию пар «найти / заменить». Я решил разделить выражения с помощью | , Первый аргумент содержит разделенный список поисковых терминов, а второй аргумент содержит разделенный список замещающих терминов.

Параметр /X включает escape-последовательности в выражениях замены.

Параметр /M активирует многострочный режим, поэтому вы можете выполнять поиск через разрывы строк.

Параметр /F указывает исходный файл, а /O - приводит к тому, что результат перезаписывает исходный файл (обновление на месте).

Я добавил ^ продолжение строки для удобства чтения

Из командной строки:

for %F in (*.txt) do @jrepl "\r\n|STUDENT: [^\r\n]{1,200}|_[A-z].{1,300}|-{2,2000}"^
                            "\r\n\r\n|STUDENT:||" /m /x /t "|" /f "%F" /o -

Из пакетного скрипта

@echo off
for %%F in (*.txt) do (
  call jrepl "\r\n|STUDENT: [^\r\n]{1,200}|_[A-z].{1,300}|-{2,2000}"^
             "\r\n\r\n|STUDENT:||" /m /x /t "|" /f "%%F" /o -
)

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