Como executar a localização e substituição de regex usando a linha de comando do Windows

Como executar a localização e substituição de regex usando a linha de comando do Windows

Quero realizar uma localização e substituição complexa que faço com o notepad ++ usando a linha de comando. Encontrei muitas soluções na web, mas nenhuma delas atende aos meus requisitos.

Eu tenho um arquivo no qual desejo realizar localização e substituição de regex

Um outro arquivo contendo strings regex (localizar e substituir por. Posso brincar com isso para criar dois arquivos separados ou algo assim).

Por favor, oriente também como colocar strings de localização e substituição de regex neste arquivo se for possível realizar a tarefa acima.

Editar

Qualquer utilitário de localização e substituição compatível com PCRE para Windows?

Responder1

existe o comando "findstr" do Windows, mas ele não pode substituir e tem suporte limitado a regex. Além disso, veja como fazer isso com *nix e depois usar essas ferramentas no Windows. Então você pode obter grep e sed para Windows.

Algumas pessoas em lote podem usar uma ferramenta (talvez de autoria do especialista em lote Dave Benham) que mescla o microsoft jscript com o lote e tem opções para pesquisar e substituir. Acho que é perfeito se você estiver em um sistema muito bloqueado e não conseguir nem baixar um EXE. Mas, caso contrário, baixar ou copiar/colar um script é quase como obter algo de terceiros e já existem ferramentas como grep e sed que são amplamente utilizadas e podem ser baixadas para Windows.

A *?avaliação é lenta, um pouco avançada e precisa de -P (PCRE - expressões regulares compatíveis com Perl)

C:\>echo abccccdd| grep -oP "a.*?c"
abc

C:\>

Você pode remover o -P se quiser, se o regex for menos avançado. Embora eu o guarde.

O Sed não vai tão longe quanto o PCRE, mas suporta o que parece ser a segunda melhor opção com esses utilitários de linha de comando. ERE (expressões regulares estendidas). Usar sed com -r pode evitar que você use barras invertidas supérfluas. Da última vez que verifiquei, sem -r ele usa BRE (expressões regulares básicas).

Isso significa substituir a correspondência de regex por nada

C:\>echo abccccdd| sed -r "s/c{2,3}//"
abcdd

Este modificador /g fará uma pesquisa global e substituirá, portanto não substituirá apenas a primeira correspondência

C:\>echo abacacda| sed "s/a//g"
bccd

Você pode obtê-lo com o gnuwin32 ou pode usá-lo no cygwin e, em seguida, usar aspas simples e, se estiver usando o cygwin, é melhor fazê-lo no shell do cygwin, por exemplo, no shell bash do cygwin.

Este comando pode operar em arquivos, obviamente.

C:\>type a.a
asdf

C:\>


C:\>grep -o a a.a
a

C:\>sed "s/a/z/" a.a
zsdf

C:\>

Ou Perl

grep não pesquisa e substitui. Sed irá, embora sed não suporte PCRE (pelo menos não o sed que eu tenho). Outra opção é Perl. Perl Regexes são tão bons quanto PCRE, se não melhores. Olhe aquihttps://stackoverflow.com/questions/4794145/perl-one-liner-like-grepe veja que menciona este linkPerl para combinar com expressões regulares no Terminal?veja minha resposta lá, ele tem formas perl de grep e sed, e você terá um ótimo suporte regex com perl, obviamente

Se você visualizar minha resposta naquele segundo link (como eu disse), verá que digo que peguei e usei perl lá no cygwin, e também como ele pode ser usado.

informação relacionada