Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Curso de Inglês Online

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Substituindo texto em diversos arquivos ao mesmo tempo

Colaboração: Rodrigo Fonseca

Data de Publicação: 19 de Maio de 2004

Uma das coisas mais interessantes do Linux é poder usar a saída de um programa para a entrada de outro. Esta dica mostra como substituir determinado texto em todas as ocorrências nos arquivos especificados ainda mantendo um backup de segurança dos mesmos usando find, xargs e nosso amigo Perl. :)

Vamos dissecar o comando:

  find ./ -name '*.php' | xargs perl -i.bkp -p -e 's/isso/aquilo/ig;'

find ./ -name '*.php' : vai procurar por todos os arquivos .php do diretório corrente. O find é recursivo por padrão, ou seja, ele vai procurar os arquivos .php em todos os subdiretórios do diretório atual. Se você não quiser alterar nada nos subdiretórios inclua a diretiva "-maxdepth 1" para forçar o find a trabalhar apenas no primeiro nível de diretórios, ficando:

  find ./ -maxdepth 1 -name '*.php' | xargs perl -i.bkp -p -e 's/isso/aquilo/ig;'

O comando xargs apenas recebe o input do comando find (neste caso, os nomes dos arquivos) e manda para o Perl, que vai então:

  -i.bkp : criar uma cópia do arquivo com a extensão bkp ou qualquer outra
  que você escolher.
  
  -p : executar a leitura dos arquivos em loop, linha a linha.
  
  -e : (e)xecutar o comando 's/isso/aquilo/ig' que significa substituir
  a palavra "isso" pela palavra "aquilo", em cada linha dos arquivos.

Os últimos caracatecres (ig) dizem ao Perl para (i)gnorar maiúsculas e minúsculas e fazer as alterações (g)lobalmente, caso sejam encontradas mais de uma ocorrência da palavra procurada na mesma linha. Se o "g" for omitido, o Perl somente substituirá a primeira ocorrência da palavra por cada linha.

O texto de substituição pode ser uma string literal ou uma expressão regular das mais simples ou complexas, tudo depende de você, da sua experiência e da complexidade do que quiser fazer.

Um bom exemplo de utilização é se você tiver um grande website com diversas páginas que utilizem um include para um ou mais arquivos que por ventura podem ter sua localização modificada. Exemplo:

Todos (ou uma grande maioria dos) os arquivos .php possuem um include do arquivo:

  /var/www/htdocs/seudiretorio/scripts.php

De uma hora para outra, seu hosting decide mudar este caminho para: /var/www/localhost/seudiretorio/scripts.php

Ao invés de editar arquivo por arquivo, execute:

  find ./ -name '*.php' | xargs perl -i.bkp -p -e 
  's/(\/var\/www\/)\w+(\/seudiretorio\/)/$1localhost$2/ig;'

Se algo der errado na sua expressão regular:

  rm *.php
  rename .php.bkp .php *.php.bkp

Veja a relação completa dos artigos de Rodrigo Fonseca

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.00/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1354 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Treinamentos, Consultorias e Soluçoes em TI. Baseados em softwares livres e padrões abertos para ambientes de missão crítica

Submarino.com.br

Asterisk na Prática 2ª Edição