Qual é a melhor ferramenta para localizar e substituir expressões regulares ao longo de vários arquivos?
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.
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.
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:
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