O comando Localizar substitui o texto indesejado

0

Estou executando uma instância do Ubuntu EC2. Costumo usar localizar e substituir para atualizar e ajustar as coisas que são usadas em todos os arquivos.
No entanto, quando eu tenho que substituir o código PHP , eu inevitavelmente tenho que substituir o cifrão, que nunca funcionou com sucesso para mim. Eu aprendi e tentei todos os métodos de fuga para o meu conhecimento. Eu, acreditando que eu tinha um método de escapar do cifrão, que substituiria o texto com o texto desejado, tentei substituir; para o qual cada um dos meus arquivos contendo um cifrão - que é todos eles - foi agora completamente rasgado e preenchido com o conteúdo que eu estava tentando substituir.
O comando que usei foi:

find ./ -name \*.php -exec sed -i "s|[\'REQUEST_URI\']|\$_SERVER[\'REQUEST_URI\']|g" {} \;
Não sei por que isso ocorreu e agora o site que venho criando há mais de um ano foi completamente destruído. Os efeitos são os seguintes:

<?php
       $sql =
       "$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']L$_SERVER['REQUEST_URI']C$_SERVER['REQUEST_URI'] questions.question$_SERVER['REQUEST_URI']title, questions.question$_SERVER['REQUEST_URI']content, questions.question$_SERVER['REQUEST_URI']date, questions.question$_SERVER['REQUEST_URI']answered
       F$_SERVER['REQUEST_URI']OM questions
       WH$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI'] questions.question$_SERVER['REQUEST_URI']topic = $topic$_SERVER['REQUEST_URI']D AND questions.question$_SERVER['REQUEST_URI']answered $_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI'] N$_SERVER['REQUEST_URI']LL
       O$_SERVER['REQUEST_URI']D$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI'] BY questions.question$_SERVER['REQUEST_URI']date D$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']C
       L$_SERVER['REQUEST_URI']M$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI'] 5";

       $result = $conn->query($sql);

       if($result !== N$_SERVER['REQUEST_URI']LL && $result->num$_SERVER['REQUEST_URI']rows > 0)
       while($row = $result->fetch$_SERVER['REQUEST_URI']assoc()) {
       echo "
       <a href=$_SERVER['REQUEST_URI']view$_SERVER['REQUEST_URI']uestion.php?" . $$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']V$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI'][$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']Y$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']$_SERVER['REQUEST_URI']NG$_SERVER['REQUEST_URI']] . "&question=" . $row[$_SERVER['REQUEST_URI']question$_SERVER['REQUEST_URI']title$_SERVER['REQUEST_URI']] . "$_SERVER['REQUEST_URI'] class=$_SERVER['REQUEST_URI']questionAnchor$_SERVER['REQUEST_URI']><div id=$_SERVER['REQUEST_URI']unanswered$_SERVER['REQUEST_URI']>
                  <div class=$_SERVER['REQUEST_URI']offset$_SERVER['REQUEST_URI']uestion$_SERVER['REQUEST_URI']>
                  <h4 class=$_SERVER['REQUEST_URI']thumbnail$_SERVER['REQUEST_URI']itle$_SERVER['REQUEST_URI']>" . $row[$_SERVER['REQUEST_URI']question$_SERVER['REQUEST_URI']title$_SERVER['REQUEST_URI']] . "</h4>
                  <div class=$_SERVER['REQUEST_URI']thumbnailDesc$_SERVER['REQUEST_URI']>" . $row[$_SERVER['REQUEST_URI']question$_SERVER['REQUEST_URI']content$_SERVER['REQUEST_URI']] . "</div>
                  </div>
        </div></a>
    ";
    
por Cartier 11.01.2016 / 23:57

1 resposta

1

Receio que tenha danificado gravemente o seu site.

Analisando seu comando sed :

sed -i "s|[\'REQUEST_URI\']|\$_SERVER[\'REQUEST_URI\']|g"

O comando teve o efeito de substituir qualquer caractere no 'REQUST_I set (ou seja, cada ' , R , E , ...) com a string $_SERVER['REQUEST_URI'] em cada arquivo encontrado por o comando find .

Isso não é reversível, pois qualquer instância de $_SERVER['REQUEST_URI'] pode agora corresponder a qualquer um dos caracteres no conjunto 'REQUST_I .

A única coisa que ajudaria um pouco seria executar um comando para substituir todas as instâncias de $_SERVER['REQUEST_URI'] por um único caractere em cada arquivo afetado pelo comando, para melhorar a legibilidade e tornar menos difícil a reparação dos arquivos. / p>

Por exemplo, para substituir todas as instâncias de $_SERVER['REQUEST_URI'] por um ponto (isso obviamente terá o efeito de substituir também as instâncias legítimas de $_SERVER['REQUEST_URI'] ):

sed "s/\$_SERVER\['REQUEST_URI'\]/./g" file

Veja o que recebo se eu executar o comando no seu snippet:

<?php
       $sql =
       "..L.C. questions.question.title, questions.question.content, questions.question.date, questions.question.answered
       F.OM questions
       WH... questions.question.topic = $topic.D AND questions.question.answered .. N.LL
       O.D.. BY questions.question.date D..C
       L.M.. 5";

       $result = $conn->query($sql);

       if($result !== N.LL && $result->num.rows > 0)
       while($row = $result->fetch.assoc()) {
       echo "
       <a href=.view.uestion.php?" . $....V..[.....Y.....NG.] . "&question=" . $row[.question.title.] . ". class=.questionAnchor.><div id=.unanswered.>
                  <div class=.offset.uestion.>
                  <h4 class=.thumbnail.itle.>" . $row[.question.title.] . "</h4>
                  <div class=.thumbnailDesc.>" . $row[.question.content.] . "</div>
                  </div>
        </div></a>
    ";
    
por kos 12.01.2016 / 01:15