簡體   English   中英

如何使用shell腳本查找和刪除下面的行

[英]how to find and delete below line using shell script

由於惡意攻擊,下面的行已打印在我所有的php項目頁面中。現在想一想如何使用shell腳本查找和刪除此行

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

我嘗試使用下面的腳本但出現錯誤。我的意思是說我無法使用sed commend匹配上面的行。請幫助我更正此腳本。

#!/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

嘗試使用:分隔符而不是/,因為在您的模式America / La與/ ir沖突時會加上反斜杠,因此其America / la

您沒有正確轉義正則表達式。 請嘗試以下操作:

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)

這可能對您有用(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

暫無
暫無

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

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