find e sed não substituíram o conteúdo do arquivo

0

Eu tentei usar find -type f -name "*.php" -exec sed -i.bak 's|"$_SERVER[\"DOCUMENT_ROOT\"]./|$_SERVER[\"DOCUMENT_ROOT\"]."/|gI' {} \; para substituir

<?php
include("$_SERVER["DOCUMENT_ROOT"]./info/benth_nav_top.php");
include_once("$_SERVER["DOCUMENT_ROOT"]./analyticstracking.php");
?>

para

<?php
include($_SERVER["DOCUMENT_ROOT"]."/info/benth_nav_top.php");
include_once($_SERVER["DOCUMENT_ROOT"]."/analyticstracking.php");
?>

Infelizmente, isso não substituiu nada.

O que eu senti falta?

Obrigado antecipadamente

    
por user3523406 20.06.2018 / 03:32

1 resposta

1

Você deseja mover as aspas duplas de antes de $_SERVER["DOCUMENT_ROOT"]. para depois.

O comando sed para fazer isso em um único arquivo:

sed 's/"\(\$_SERVER\["DOCUMENT_ROOT"\]\.\)/"/' file.php

Os $ , [ , ] e . são especiais no padrão e precisam ser ignorados (esse é o principal problema em seu código). A expressão acima captura a parte da string que queremos manter inalterada e a substitui pela mesma string, mas com um " inserido posteriormente.

Adicione g após s/.../.../ para fazer a alteração de todas as ocorrências do padrão em cada linha.

Para executar isso em todos os arquivos .php no diretório atual ou abaixo dele:

find . -type f -name '*.php' \
    -exec sed -i.bak 's/"\(\$_SERVER\["DOCUMENT_ROOT"\]\.\)/"/' {} ';'
    
por 20.06.2018 / 08:39

Tags