sysmerge IT

24 нояб. 2017 г.

sed: удалить N строк после совпадения

Имелась задача - много-много-много-много, ну вы поняли, файлов, в которые некто нагадил вредоносным скриптом. Нагажено везде одинаково, отличался номер начальной строки, куда был вставлен код. Сооружать многострочный паттерн для sed как-то очень неудобно, а потому можно просто найти первую строку(она, благо, нигде больше не встречалась в коде) и удалить N строчек после, включая само вхождение паттерна.
Выглядит так
# find /var/www/files/ -type f -name "index.php" -exec sed -i".bak" -e "/ini_set('display_errors','Off'); error_reporting('E_ALL');/,+9d" {} \;
 Ищем мы, как вы поняли, " ini_set('display_errors','Off'); error_reporting('E_ALL');", и удаляем эту строку +  9 следующих. При этом сохраняется оригинал измененного файла .bak