Como executar regex localizar e substituir usando a linha de comando do windows

0

Eu quero executar complexo encontrar e substituir o que eu faço com o notepad + + usando a linha de comando. Eu encontrei muitas soluções da web, mas nenhuma delas corresponde aos meus requisitos.

Eu tenho um arquivo no qual quero executar o regex para localizar e substituir

Um outro arquivo contendo strings regex (ambos encontrados com e substituídos por. Eu posso tocar com isso para fazer dois arquivos separados ou qualquer coisa.)

Por favor, guie também como colocar o regex para encontrar e substituir strings neste arquivo se for possível fazer a tarefa acima.

Editar

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

    
por Rahul Patel 11.12.2015 / 06:59

1 resposta

1

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

Algumas pessoas em lote podem usar uma ferramenta (talvez criada pelo especialista em lotes dave benham) que mescla o jscript da Microsoft com o lote e tem opções para pesquisa e substituição. Eu acho que é perfeito se você estiver em um sistema muito bloqueado e não pode nem baixar um EXE. Mas, do contrário, fazer o download ou copiar / colar um script é quase como obter uma coisa de terceiros e, em seguida, já existem ferramentas disponíveis, como grep e sed, que são amplamente usadas e podem ser baixadas para windows.

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

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

C:\>

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

O

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

Isso significa substituir a correspondência de expressão regular 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 gnuwin32, ou você pode usá-lo a partir do cygwin, então use aspas simples e, se estiver usando o cygwin, é melhor fazê-lo a partir do shell do cygwin, por exemplo. concha bash do cygwin.

Esse 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

o grep não pesquisa nem substitui. Sed, embora sed não suporte PCRE (pelo menos não o sed eu tenho). Outra opção é perl. Regexes Perl são tão bons quanto PCRE, se não melhor. Veja aqui link e veja-o mencionando este link Perl para correspondência com expressões regulares no Terminal? veja minha resposta lá, tem formas perl de grep e sed , e você terá um ótimo suporte de regex com perl obviamente

Se você visualizar minha resposta no segundo link (como eu disse), então você verá que eu disse que usei o perl lá no cygwin, e como ele pode ser usado.

    
por 11.12.2015 / 07:32