De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários