Qual é a melhor ferramenta para localizar e substituir expressões regulares ao longo de vários arquivos?

StackOverflow https://stackoverflow.com/questions/102083

  •  01-07-2019
  •  | 
  •  

Pergunta

De preferência ferramentas gratuitas, se possível.

Além disso, a opção de procurar por múltiplas expressões regulares e cada substituição com diferentes cordas seria um bônus.

Foi útil?

Solução

Perl. Sério, ele faz coisas sysadmin muito mais fácil. Aqui está um exemplo:

perl -pi -e 's/something/somethingelse/g' *.log

Outras dicas

sed é rápido e fácil:

sed -e "s/pattern/result/" <file list>

Você também pode juntá-lo com find:

find <other find args> -exec sed -e "s/pattern/result/" "{}" ";"

Textpad faz um bom trabalho no Windows. E é um editor muito bom também.

Eu escrevi uma ferramenta gratuita de linha de comando para o Windows para fazer isso. É chamado rxrepl , ele suporta unicode e arquivo de pesquisa. Alguns podem achar que é útil.

Sem surpresa, Perl faz um bom trabalho de lidar com isso, em conjunto com um shell decente:

for file in @filelist ; do
  perl -p -i -e "s/pattern/result/g" $file
done

Isto tem o mesmo efeito (mas é mais eficiente, e sem a condição de corrida) como:

for file in @filelist ; do
  cat $file | sed "s/pattern/result/" > /tmp/newfile
  mv /tmp/newfile $file
done

editor de diretório do Emacs tem a função `dired-do-query-replace-regexp' para procurar e substituir um regexp sobre um conjunto de arquivos marcados.

No Windows, eu costumava gostar WinGrep

De acordo com o Ubuntu, eu uso Regexxer.

Para localizar e substituir em múltiplos arquivos no Windows eu encontrei rxFind para ser muito útil.

Para Mac OS X, TextWrangler faz o trabalho.

O meu favorito é PowerGrep por JGsoft. Ele interface com RegexBuddy que pode ajudá-lo a criar e testar a expressão regular, automaticamente faz o backup todas as alterações (e fornece desfazer capacidades), fornece a capacidade de analisar vários diretórios (com padrões de nome de arquivo), e ainda suporta formatos de arquivos como o Microsoft Word, Excel e PDF.

PowerGrep tela

Eu iria para a festança + encontrar + sed.

Vim para o resgate (e presidente ;-)). Tente:

vim -c "argdo! s:foo:bar:gci" <list_of_files>

(eu faço interruptor -c amor de Vim, é mágico. Ou se você já teve no Vim, e abriu os arquivos, por exemplo:.

vim <list_of_files>

questão apenas:

:bufdo! s:foo:bar:gci

De sed curso e perl é capaz também. HTH.

Eu tenho o luxo de Unix e Ubuntu; Em ambos, eu uso gawk para qualquer coisa que requer pesquisa de linha-a-linha e substituir, especialmente para linha-a-linha para substring (s). Recentemente, este foi o mais rápido para o processamento de 1100 mudanças contra milhões de linhas em centenas de arquivos (um diretório) No Ubuntu eu sou um fã de regexxer

 sudo apt-get install regexxer

No Windows há alternativa livre que funciona melhor: Notepad ++

Vá em "Pesquisar" -> "Localizar em arquivos". Pode-se dar diretório, padrão de arquivo, conjunto de expressões regulares, em seguida, visualizar os jogos e, finalmente, substituir todos os arquivos de forma recursiva.

Eu amo esta ferramenta:

http://www.abareplace.com/

Dá-lhe uma "enquanto você digita" preview de sua expressão regular ... fantástico para aqueles que não estão bem versado em RE de ... e é super rápido na mudança de centenas ou milhares de arquivos de uma vez ...

E, em seguida, vamos desfazer suas alterações, bem ...

Muito bom ...

Patrick Steil - http://www.podiotools.com

Se 'textpad' é uma resposta válida, gostaria de sugerir Texto Sublime mãos para baixo.

edições Multi-cursor são uma forma ainda mais eficiente para fazer substituições no achado geral I, mas a sua " Encontre em arquivos " é top tier para regex bulk / substituições achado simples.

jEdit 's regex procurar e substituir em arquivos é bastante decente. Ligeiramente exagero se você usá-lo apenas para que, no entanto. Ele também não suporta o multi-expressão substituir você pediu.

Eu encontrei a ferramenta RxFind útil (OSS livre).

Suportes (código-fonte, deb / Ubuntu, OSX e Windows) tem uma boa visualização dos resultados, permitindo selecioná-las individualmente aplicar substituição. Você pode pesquisar por texto padrão, maiúsculas e minúsculas ou não, e regex. Muito importante:. Você pode excluir padrões de arquivos e diretórios na busca

Para pelo menos 25 anos, eu estive usando Emacs para substituições em larga escala em todo grande número de arquivos. Execute etags para especificar qualquer conjunto de arquivos a serem pesquisados:

$ etags file1.txt file2.md dir1/*.yml dir2/*.json dir3/*.md

Em seguida, abra Emacs e tags-query-replace prazo, o que leva para regex ea substituição:

\b\(foo\)\b
\1bar
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top