Como fazer uma mudança de código global

0

Estou reutilizando muito código de um site para um novo. Preciso alterar dois endereços de links por toda parte, por exemplo / abc / para / cba / e abc.com para abc.us. Eu posso entrar no servidor e usar o software 'terminal' ou editá-lo localmente com um editor de php. O editor que tenho não tem essa capacidade. Eu tenho milhares de linhas de código e não consigo encontrar todos os casos em que a mudança é necessária.

Deve haver uma solução simples. Eu só não sei onde encontrá-lo.

    
por Ronald B Cadby 16.12.2017 / 17:48

3 respostas

2

Existe um aplicativo para exatamente esse fluxo de trabalho nos repositórios padrão do Ubuntu chamado Geany. Geany é tão leve que pode editar em lote 50 arquivos da web ao mesmo tempo. Como o Geany é um programa GUI, é fácil de usar e tem a vantagem de usar o terminal para ver o que você está fazendo, porque cada arquivo é aberto em uma guia separada. O recurso Substituir do Geany suporta expressões regulares, o que é útil para editar tags de marcação. Quando termino de editar os vários arquivos, normalmente abro todos os 50 deles juntos em um navegador da web para verificar meu trabalho.

Para instalar o Geany em todas as versões atualmente suportadas do Ubuntu, abra o terminal e digite:

sudo apt-get install geany
    
por karel 16.12.2017 / 19:14
2

Você pode usar grep para encontrar os arquivos que contêm abc.com . E então você pode usar sed para substituir abc.com por abc.us . Você só precisa ter cuidado para evitar falsos positivos. Eu adicionaria primeiro todos os arquivos do site a um repositório Git, então execute as substituições, verifique as substituições com git diff , então, se algo desse errado, eu poderia facilmente reverter.

cd path/to/site
git init
git add .
git commit -m 'Add files'
grep -rlFwZ abc.com . | xargs -0 sed -i 's/\<abc\.com\>/abc.us/g'
git diff

Explicação dos sinalizadores de grep :

  • -r procura recursivamente em todos os subdiretórios
  • -l imprime nomes de arquivos que correspondem em vez das correspondências
  • -F trata o padrão como uma string literal, não como uma expressão regular (mantenha o . um ponto, não "qualquer caractere")
  • -w corresponde a palavras inteiras (para que "foo abc.com bar" seja compatível, enquanto que "fooabc.com bar" ou "foo abc.combar" não)

No padrão de sed , o \< e o \> têm a mesma lógica que o -w do grep e o . é ignorado para servir a mesma lógica que o -F do grep .

    
por janos 16.12.2017 / 17:54
1

Estes dois comandos devem ser úteis:

grep -RlZE abc.com /path/to/folders | xargs -0 sed -i 's/abc.com/abc.us/g'

grep -RlZE \/abc\/ /path/to/folders | xargs -0 sed -i 's_/abc/_/cba/_g'

Mais informações:

  • grep -RlZE abc.com /path/to/folders : procura por arquivos que contenham os textos que você está tentando alterar e retorna o caminho do arquivo. Isso será dado ao comando sed .

  • -R : pesquise recursivamente pelos arquivos

  • -l : caminho do arquivo de retorno apenas para correspondências
  • -E : grep interruptor de regex estendido
  • -Z : usado para manipular arquivos com caracteres estranhos de string

Para criar backups, supondo que o espaço não seja um problema, execute os comandos desse modo para criar backups, caso algo dê errado:

grep -RlZE abc.com /path/to/folders | xargs -0 sed -i.bak 's/abc.com/abc.us/g'

grep -RlZE \/abc\/ /path/to/folders | xargs -0 sed -i.bak 's_/abc/_/cba/_g'
    
por George Udosen 16.12.2017 / 18:09