簡體   English   中英

SED命令,用於在現有PHP文件的開頭替換復雜的PHP字符串

[英]SED command to replace a complex PHP string at the beginning of an existing PHP file

我決定在遭受攻擊的幾個基於PHP的網站上安裝ZB Block。 所有網站都在Ubuntu 14.04 LTS / Apache 2.4 / PHP 5.5.9上運行

ZB塊腳本調用需要插入每個.php文件的開頭。 為了自動在多個網站上的所有.php文件中進行字符串替換,我做了sed語句以在第一次出現時執行替換

sed '#s:<?php:<?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?><?php#’ First-Occurence-Replacement-Sample.php > First-Occurence-Replacement-Sample.tmp && mv First-Occurence-Replacement-Sample.tmp First-Occurence-Replacement-Sample-NEW.php

運行sed語句得到以下結果:
1創建了名為First-Occurence-Replacement-Sample-NEW.php的文件
2未進行所需的字符串替換。

 # ls -l
 -rw-r--r-- 1 root root 39 Feb 17 15:40 First-Occurence-Replacement-Sample-NEW.php
 -rw-r--r-- 1 root root 39 Feb 17 15:13 First-Occurence-Replacement-Sample.php

 # nano First-Occurence-Replacement-Sample-NEW.php

 Line 1 <?php <<< string wasn’t replaced as desired.
 Line 2 /***************************************************************************
 Line 3 <?php <<< This second occurrence should never be replaced
 Line 4 ?> ?>

所需的sed語句行為

字符串替換前的樣本文件

 Line 1 <?php
 Line 2 /***************************************************************************
 Line 3 <?php
 Line 4 ?>

字符串替換后的樣本文件

 Line 1 <?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?><?php
 Line 2 /***************************************************************************
 Line 3 <?php <<< This second occurrence should never be replaced
 Line 4 ?> ?>

sed語句如何更改才能實現所需的替換?

在獲得幫助以使此sed語句正常工作后,我想將其放入腳本中,以便在充滿.php文件的整個目錄中運行替換文件,如下所示:

創建腳本文件:#nano zbblock-string-insertion.bash

 #! /bin/bash
 for f in *.php
 do
 echo "Converting $f"
 sed '#s:<?php:<?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?><?php#’ $f > $f.tmp && mv $f.tmp $f
 done

保存文件zbblock-string-insertion.bash,使其可執行並運行!

Kenavoz,有效,謝謝! 你真是個天才! 不要讓你的公婆告訴你任何不同。

要遞歸目錄,請將Kenavox提供的命令行修改為:

find -name '*.php' -type f -exec sed -I.........

現在。 該命令執行遞歸替換。

希望這可以幫助:

find . -name *.php -type f -exec sed -i "1 s~<?php~<?php require('/var/www/html-mydomain.tld/zbblock/zbblock.php'); ?>&~" {} \;

它會在當前目錄下或目錄下查找所有php文件,並將sed命令應用於每個文件。

sed命令將php require命令添加到文件第一行中的第一個匹配項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM