LINUX.ORG.RU

Sed awk замена удаление из html кода

 sed awk python java php


0

1

Есть html который генерируется по запросу пользователя. Пытаюсь оттуда заменить данные в data-image-src=«» на свои,но там стоят названия на русском и это набор цифр % ? / и других символов.Как их можно экранировать?Например data-image-src=«/п║я┌я─я┐п╨я┌я┐я─п╫п╟я▐+я│я┘п╣п╪п╟.jpg?version=18&modificationDate=1346072587984»> При чем название меняется. После этого строка продолжается,но менять мне нужно только это значение,чтобы на локальной машине можно было открыть html и в нем присутствовали картинки. С удалением такая же беда,как удалить тег начиная от <div bla bla > до его закрытия </div>


Сейчас тебе напишут. Используй язык с готовой библиотекой. Regexp не для парсинга.

anonymous
()

данные в data-image-src=«»

Очевидно, данные внутри data-image-src=«» подпадут под регулярное выражение [^«]*

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

Да можно удалять строчку,вставить вместо нее новую. И еще вопрос пытаюсь экранировать \«1»\ но sed ругается,как то не так экранируется?

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

И еще вопрос пытаюсь экранировать \«1»\ но sed ругается,как то не так экранируется?

Я тоже не понимаю, что Вы пытаетесь экранировать.

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

Если Перл, то попробуй:
WWW::Mechanize
HTML::TreeBuilder
HTML::TreeBuilder::XPath

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

find -type f -name \*.html -exec sed -i -r 's/data-image-src=«то что здесь,не заменяется,sed ругается»/data-image-src=«1.png»/g' {} \; Как же удалить то что в кавычках или заменить то что в кавычках И как дать понять sed что делать это нужно только в первом совпадений,в следующем другая замена.

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

data-image-src=«то что здесь,не заменяется,sed ругается»

data-image-src=«[^»]*"

И как дать понять sed что делать это нужно только в первом совпадений
/g

Убрать «g», добавить «q»?

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

find -type f -name \*.html -exec sed -i -r 's/data-image-src=«[^»]*«/src=„1.png“/q' {} \; sed: -e expression #1, char 38: unknown option to `s С ключом g работает,и внутри скобок чистит,то что нужно,но везде.Есть два таких места и хотелось бы в одном вставить одно,в другом другое.Это реально sed'y?

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

Есть два таких места

/pattern/{s/.../.../};/pattern/{s/.../.../}

В самом деле, лучше обработайте это каким-нибудь Perl + XML::Twig/HTML::TreeBuilder

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

Приспособился) ключ /q не работает. Подумаю еще над вашим предложением обработать perl. А как быть с удалением тегов начиная от <div bla* > до его закрытия </div>

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

Я ошибся, q - не ключ, а команда, и его нужно отделять символом ";".

А как быть с удалением тегов начиная от <div bla* > до его закрытия </div>

Взять нормальный парсер. В принципе, с более сильным sed-fu это можно сделать и sed'ом (от такого-то до такого-то паттерна проглатывать текст, затем что-то заменить в нём и всё это напечатать), но это очень сложно и наверняка сломается на вложенных тегах.

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

Я победил его) все ок Осталась проблема с divами.Но они вложенные есть.Хочется все таки домучать sed и не использовать perl etc.

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