Localizar & Substituir texto em vários documentos na linha de comando
Como muitas coisas na linha de comando, não há processo de confirmação, portanto, você deve certificar-se de que sua sintaxe está definida corretamente antes de iniciar um comando, caso contrário, pode ser necessário fazer outro localizar e substituir para reparar seu erro de digitação.
A sintaxe básica do comando é a seguinte: perl -pi -w -e 's/THIS/THAT/g;' /caminho/para/arquivos.txt
Para um exemplo de uma única palavra, se você precisar substituir todas as ocorrências de “ogre” por “cornbread” em cada arquivo .txt dentro da pasta “Documentos”, então você usaria o seguinte comando:
perl -pi -w -e 's/ogro/pão de milho/g;' ~/Documents/.txt
Para um exemplo de encontrar e substituir uma frase inteira, vamos supor que vamos substituir a frase inteira “A Fábrica de Chocolate ” com “The Wizard of Oz” em um grupo de arquivos .txt começando com “Films” armazenados no diretório Documents:
perl -pi -w -e 's/A Fábrica de Chocolate/O Mágico de Oz/g;' ~/Documents/Films.txt
O localizar e substituir é feito imediatamente. Você pode verificar novamente a alteração usando cat e grep para verificar:
cat ~/Documents/Films124.txt |grep Mágico de Oz"
Reconhecidamente, isso é bastante avançado e, sim, localizar e substituir lotes em vários documentos pode ser feito de maneira mais amigável por meio de aplicativos GUI como TextWrangler e BBEdit, mas às vezes a linha de comando é apenas mais rápida para tarefas rápidas como esta e outras semelhantes, além de não exigir nenhum download adicional para usar.
Parabéns ao Lifehacker pelo excelente truque.
Update: O comando 'sed' é outra maneira de localizar e substituir rapidamente por meio da linha de comando. Cobrir o sed é principalmente um tópico para outro artigo, mas a sintaxe básica do uso do sed para esta tarefa é um pouco mais simples e, portanto, mais fácil de lembrar:
sed -i 's/THIS/THAT/g' /path/to/files.txt
Não existe maneira certa ou errada, então se você usa perl ou sed torna-se uma questão de preferência pessoal.
