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