Я ищу, чтобы отделить эту конкретную строку от строки 1 около 16 000+ файлов.
Начало инъекции:
<?php if(!isset($GLOBALS` Middle of the injection is: `7860msvd` And end of the injection is: `oqggbrtstz-1; ?>
Этот контент находится только в 1 строке (первый)
Не знаю, как это сделать, но то, что у меня есть, следующее:
sed -i -e '1 s/.*<\?php if\(\!isset\(\$GLOBALS\.*7860msvd.*oqggbrtstz-1; ?>//g'
error: sed: -e expression #1, char 67: Unmatched ( or \(
Любая помощь была бы потрясающей.
Вам не хватает литературного персонажа ?
и использование -r
получить результат ожидания
sed -ri '1 s/.*<\?php if\(\!isset\(\$GLOBALS.*7860msvd.*oqggbrtstz-1; \?>//g' File -r, --regexp-extended use extended regular expressions in the script.
@josifoski прав, не избегайте скобок. Незначительная коррекция его ответа, чтобы избежать снятия кода перед инъекцией:
sed -i -e '1 s/<\?php if(\!isset(\$GLOBALS.*7860msvd.*oqggbrtstz-1; \?>//g'
Один важный недостающий ответ – «не делай этого». Затвердите сайт, прежде чем делать что-либо еще. Затем восстановите сайт из хорошо известных резервных копий или переустановите сайт из контроля версий.
Поиск и исправление известной проблемы не является правильным решением. Он устранит один очевидный симптом, но не сделает ничего, чтобы вас снова не взломали. И с любой существенной базой кода вероятность того, что злоумышленник оставит другие сюрпризы, которые вы просто еще не заметили.
синтаксическая коррекция вашей команды
sed -i -e '1 s/.*<\?php if(\!isset(\$GLOBALS\.*7860msvd.*oqggbrtstz-1; \?>//g'
не нужно бежать (), когда не присутствует обратная связь и отсутствует выход?