[英]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.