Nesse post compartilho um trecho de comando para usar no terminal. Esse comando permite que você substitua trechos de texto ou código dentro de todos os arquivos do servidor. Isso é muito útil para quando tem um tempo que replica em multiplos arquivos, sem ter que acessar cada um individualmente.
Segue abaixo um exemplo para substituir texto de arquivos .html
find ./ -type f -name "*.html" -exec sed -i 's|TEXTO_ANTIGO|TEXTO_NOVO|g' {} +
Abaixo segue uma modificação para verificar outros tipos de arquivos, seguindo seus formatos:
find ./ -type f \( -name "*.html" -o -name "*.css" -o -name "*.js" \) -exec sed -i 's|TEXTO_ANTIGO|TEXTO_NOVO|g' {} +
DICA EXTRA: No Mac você deve usar -exec sed -i ''
Explicação:
• ( … ): agrupa as condições.
• -o: ou (OR).
• -name “.html”: arquivos HTML.
• -name “.css”: arquivos CSS.
• -name “*.js”: arquivos JavaScript.
• sed -i: substitui diretamente nos arquivos.
• s|…|…|g: substituição global (usa | como delimitador para facilitar caminhos com /).
Tambem é possivel pegar um valor antigo, mas que tenha algum valor aleatório no meio, e trocar por um novo, como por exemplo: assets/img/logo-v1.png para assets/img/logo-v2.png adicionando [^"]*\ onde esta a versão. Ficaria assim: assets/img/logo-[^"]*\.png
Segue exemplo abaixo:
find . -type f -name "*.html" -exec sed -i 's|TEXTO_ANTIGO[^"]*\OUTRA_PARTE|TEXTO_NOVO|g' {} +
Caso queira encontrar um texto especifico nos arquivos ou confirmar se ele existe antes de mudar, segue comando abaixo:
grep -rnw ./ -e 'TEXTO_BUSCADO'
Se for em algum arquivo com formato especifico:
grep -rnw --include="*.html" ./ -e 'TEXTO_BUSCADO'
Para adicionar uma linha logo acima de outra, como por exemplo, adicionar um script no fechamento da tag Head:
find . -type f -name "*.html" -exec sed -i '/<\/head>/i\
<script type="text/javascript" async src="LINK_DO_SCRIPT"></script>
' {} +
Explicação detalhada:
/<\/head>/: É a expressão regular que procura pela linha que contém
i\: É o comando do sed para inserir antes (de insert before)
sed '/<\/head>/i\
<script ... ></script>
'
Isso insere o script antes da tag head.
Se você quiser adicionar logo abaixo do , você deve usar o comando a\ (de append, ou adicionar depois):
sed '/<\/head>/a\
<script ... ></script>
'
