Хочу показать вам возможности фильтрующего, при помощи pcre, веб-прокси - Privoxy, а то при его упоминании на linux форумах в ответ слышишь: "не нужно, bfilter режет банеры ис каропки".
К примеру мы хотим почитать и распечатать книжку Linux для пользователя на сайте citforum.ru.
Чтение на маленьких экранах не удобно из-за дизайна сайта, про распечатку лучше не говорить вообще.
Вот как выглядит сделанный мной privoxy фильтр для этого сайта:
FILTER: citforum.ru-print-m
s@\
(<body[^>]*>)\
.+\
<!--B2BCONTEXT_CONTENT_BEGIN-->\
(.+)\
<center><!-- AdRiver code START\. Type:468x60 Site: citforum PZ: 0 BN: 1 -->\
.+\
</body>\
@\
$1\
\n<!-- privoxy begin -->\n\
$2\
\n<!-- privoxy end -->\n\
</body>\
@sig
добавляем это в /etc/privoxy/user.filter
Теперь разберём детально.
FILTER: citforum.ru-print-m - объявление в privoxy фильтра с названием "citforum.ru-print-m"
Фильтруется содержимое тега body, остальное без изменений.
Сам фильтр имеет структуру вида s@шаблон@подстановка@sig, для наглядности я разбил его на строки, добавив перед каждым переносом символ \.
- (<body[^>]*>) - Ищем начало тега body и запоминаем его для последующей вставки в результат, всё что внутри () запоминается, [^>]* - означает любые символы кроме >, остальное обычный html код.
- .+ - Любые символы, всё это будет вырезано.
- <!--B2BCONTEXT_CONTENT_BEGIN--> - Расположено перед нужным для нас текстом, скопировано из html без изменений, также всё вырезается.
- (.+) - Тоже, что и .+ с запоминанием результата, содержит интересующий нас текст в полном объёме.
- <center><!-- AdRiver code START\. Type:468x60 Site: citforum PZ: 0 BN: 1 --> - Расположено после нужного нам текста, взято из html, . заменена на \. из-за того, что . является regexp инструкцией обозначающей любой символ, всё вырезается.
- .+ - Смотрите выше.
- </body> - Ищем закрывающий тег для body, код html без изменений, вырезается.
Теперь подстановка.
- $1 - Вставляем body.
- \n<!-- privoxy begin -->\n - Вставляем html комментарий для отладки, можно не делать.
- $2 - Вставляем интересующий нас текст в полном объёме.
- \n<!-- privoxy end -->\n - Смотрите выше.
- </body> - Закрываем body.
Вот и всё.
Так выглядит без переносов:
FILTER: citforum.ru-print-m
s@(<body[^>]*>).+<!--B2BCONTEXT_CONTENT_BEGIN-->(.+)<center><!-- AdRiver code START\. Type:468x60 Site: citforum PZ: 0 BN: 1 -->.+</body>@$1\n<!-- privoxy begin -->\n$2\n<!-- privoxy end -->\n</body>@sig
Фильтр работает для всего содержимого citforum.ru.
Фильтров может быть несколько, в этом случае они применяются последовательно, используя результат предыдущего фильтра.
FILTER: имя
s@шаблон@подстановка@sig
s@шаблон@подстановка@sig
s@шаблон@подстановка@sig
Теперь в файле /etc/privoxy/user.action укажем Privoxy применить фильтр к URL
{+filter{citforum.ru-print-m} \
}
citforum.ru/operating_systems/linux/user
Тоже самое можно сделать через веб-интерфейс.

Скриншоты до и после фильтра.
Сверху:


Снизу:


Вот еще пример - на http://jenyay.net/Programming/Tools есть куча статей по использованию vim и про git, есть возможность распечатать, но в распечатку зачем-то добавлено голосование, режем его.
FILTER: jenyay.net-print-m
s@<div class='vspace'></div>[^<]*<div class='rater' >.+</body>@</body>@sig
{+filter{jenyay.net-print-m} \
}
jenyay.net
Можно еще, к примеру, поменять CSS.
Некоторые при помощи Privoxy вырезают троллей на форумах(не в буквальном смысле :D).
Ссылки:
Краткое описание синтаксиса PCRE
РУССКИЙ PRIVOXY - Имеется форум, на котором можно задать вопрос и почитать туториал по созданию фильтров.
Я уверен, что Greignar, обитающий что на этом форуме, ответит на любой вопрос по теме и, возможно даже, фильтр сделает по просьбе (только не наглейте).
Жду оценок :D