Usando Expressão Regular em arquivos em lote

0

É possível escrever expressões regulares em um arquivo de lote como uma localização e substituição em todos os arquivos?

No momento, estou convertendo docx para txt usando prompts pandoc em um arquivo em lote e quero que o arquivo em lote também execute um localizar e substituir os arquivos convertidos para limpá-los, em vez de abrir no notepad ++ e executar poucos encontram e substituem manualmente.

Tentando transformar um trabalho de 5 a 10 minutos em um trabalho máximo de 2 minutos para o trabalho, na verdade, mas estou bastante familiarizado com a codificação.

Tentando executar o seguinte:

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]

Se alguém puder ajudar ou pelo menos me indicar a direção certa. Eu não tenho experiência com isso além de editar arquivos em lote que já existem para fazê-los fazer o que eu quero.

    
por Cherie 20.12.2016 / 04:15

1 resposta

1

Você pode usar JREPL.BAT para realizar a localização / substituição em um único arquivo, e, em seguida, empacote isso dentro de um loop FOR para aplicá-lo a "todos" arquivos.

JREPL.BAT é um processador de texto de linha de comando de expressão regular. É puro script (híbrido JScript / batch) que é executado em qualquer máquina Windows do XP em diante, sem necessidade de arquivos exe de terceiros. A documentação completa está disponível na linha de comando via jrepl /? ou jrepl /?? para ajuda paginada.

Não sei bem como interpretar seu terceiro valor de substituição, mas você deve ser capaz de corrigir qualquer interpretação errada de minha parte.

O código abaixo usa a opção /T (translate), que permite especificar uma série de pares de localizar / substituir. Eu escolhi delimitar as expressões com | . O primeiro argumento contém a lista delimitada de termos de pesquisa e o segundo contém a lista delimitada de termos de substituição.

A opção /X permite sequências de escape nas expressões de substituição.

A opção /M ativa o modo de várias linhas para que você possa pesquisar em quebras de linha.

A opção /F especifica o arquivo de origem e /O - faz com que o resultado sobrescreva o arquivo original (atualização in-loco).

Eu adicionei ^ continuação de linha para legibilidade

Na linha de comando:

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 -

De um script em lote

@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 -
)
    
por 21.12.2016 / 02:21