2013-05-17 116 views
1

下面一行在我因爲惡意attacks.Now認爲所有PHP項目的網頁已經刪除打印線下方是我如何使用shell腳本如何查找和使用shell腳本

function_exists('date_default_timezone') ? 
    date_default_timezone_set('America/Los_Angeles') : 
    ($_REQUEST['c_id'])); 

我找到並刪除此行嘗試下面的腳本,但我越來越error.I的意思是說我不能夠匹配上面SED commend.Please線幫我糾正這個腳本..

#!/bin/sh 
search='^function_exists\(\'date_default_timezone\'\)\ \?\ date_default_timezone_set\(\'America/Los_Angeles\'\)\ \:\ \(\$_REQUEST\[\'c_id\'\]\)\)\;' 

for file in `find /root/test1 -name "*.php"`; do grep "$search" $file &> /dev/null if [ $? -ne 0 ]; then echo "Search string not found in $file!" else sed -i '/$search/d' $file 

回答

0

這可能會爲你工作(GNU SED)

pattern1='function_exists('\''date_default_timezone'\''' 
pattern2='.*date_default_timezone_set('\''America\/Los_Angeles'\'') :' 
pattern3='.*($_REQUEST\['\''c_id'\''\]));' 
sed '/^'"$pattern1"'/{N;N;/^'"$pattern1$pattern2$pattern3"'/d}' file 
+0

非常感謝您波東.. – kathir

1

儘量sed的搭配:分隔符,而不是/自您的模式America/La與/ ir衝突後添加反斜槓,因此它的America/la

1

你不正確地逃避正則表達式。請嘗試以下操作:

while IFS= read -r -d '' file; do 
    if grep -qF "function_exists('date_default_timezone') ? date_default_timezone_set('America/Los_Angeles') : (\$_REQUEST['c_id']));" "$file" 
    then 
     sed -i "s|function_exists('date_default_timezone') ? date_default_timezone_set('America/Los_Angeles') : (\$_REQUEST\['c_id'\]));|FOO|g" "$file" 
    fi 
done < <(find /root/test1 -type f -name "*.php" -print0)