LINUX.ORG.RU

Массовое удаление строк, по определённому правилу


0

1

Здравствуйте! На сайте поселился вирус, прописал в около 300 файлов js код вида

<!--1b998e--><script type="text/javascript" language="javascript" >                                                                                                                                                                                                                                                          ps="split";e=eval;v="0x";a=0;z="y";try{a*=25}ca
.....

</script><!--/1b998e-->
Удалил несколько штук в ручную grep -> nano -> ctrl+w -> ctrl+k И запарился. Посоветуйте как можно это сделать массово, указав, к примеру префикс и суффикс для выражения? Пробовал так
sed -r 's/<!--1b998e--><script type(.*)1b998e-->//g' *
В консоли выводится просто содержимое файлов, строки при этом не удаляются.



Последнее исправление: maroz (всего исправлений: 1)

sed умеет удалять строки, а у вас не строка, а блок строк.

К тому же команда удаления строк в sed другая, почитайте 'man sed', справку по регулярным выражениям, ну или просто «загуглите»: «sed удаление строк».

kostik87 ★★★★★
()
Ответ на: комментарий от anonymous

Перелазить скрипт, не вариант.Необходимо именно почистить то, что есть. за man спасибо, ещё я знаю info sed и sed --help :) Помогите, если можете, по конкретному вопросу, что я делаю не верно?

maroz
() автор топика
Ответ на: комментарий от kostik87

И? Всегда можно воспользоваться

. Matches any character, including newline.

anonymous
()
Ответ на: комментарий от maroz

awk либо связку sed + grep.

С помощью grep вы ищете строки начала блоки и конца, что бы в выводе grep был указан номер строки.

Ну а дальше с помощью sed удаляете каждую строку из файла между строк найденных grep, но нужно делать пересчёт номеров строк.

Либо можете повторно всё тем же grep делайте выборку строк с номерами такими-то.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

спасибо, боюсь сам такое не напишу, можете помочь написать выражение, относительно кода, приведенного в первом посте? буду благодарен :)

maroz
() автор топика

Пробовал ещё так

sed -ri '/<!--1b998e-->/,/<!--/1b998e-->/d' file.html
получаю sed: -e expression #1, char 23: unknown command: `1'

maroz
() автор топика

man sgrep. Если тебе приходит в голову мысль использовать sed для HTML, то ты ничерта не понимаешь в регулярных выражениях. Просто не делай этого.

x3al ★★★★★
()
Последнее исправление: x3al (всего исправлений: 1)
Ответ на: комментарий от x3al

да, я ничерта не понимаю в регулярных выражениях. Собственно, по этому решил спросить у тех кто понимает, иначе бы сюда не писал. Использовать sgrep возможности нет

maroz
() автор топика
Ответ на: комментарий от maroz

Давай, делай. Тебе уже всё подсказали. поставь \ перед /1.

anonymous
()
Ответ на: комментарий от maroz

Запомни одну вещь на всю жизнь: SGML — не регулярный язык. Его нельзя обрабатывать регулярными выражениями. HTML — подвид SGML.

x3al ★★★★★
()

прописал в около 300 файлов js код вида

Нет актуальных бекапов?

Есть владеешь python - lxml, руби - nokogiki, etc.

Но ежели нужно быстро и грязно - неправославный костыль:

python -c 'import re, sys; to_del = re.compile(r"<!--1b998e-->.*?<!--/1b998e-->", re.DOTALL); print( to_del.sub("", sys.stdin.read()) )'
anonymous
()
Ответ на: комментарий от x3al

Его нельзя обрабатывать

Есть же конкретные случаи, он же не парсит sgml: маловероятно, что внутри скрипта есть конечный маркер. Если нужно «здесь и сейчас» - то почему нет.

anonymous
()
Ответ на: комментарий от anonymous

И так хреново читается, тут хотя бы переменная отдельно, с намекающим именем.

anonymous
()
Ответ на: комментарий от x3al

man sgrep

Хм, и что им можно парсить html? ну вот, как правильно переделать: echo '<a><!--</a>-->test</a>' | sgrep '"<a>" .. "</a>"'

Что-то мне намекает, что грамматики sgrep не включает в себя sgml, но можете опровергнуть, а пока:

Если тебе приходит в голову мысль использовать sgrep для HTML, то ты ничерта не понимаешь в HTML. Просто не делай этого.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.