Задача в принципе тривиальная, но нужен некоторый совет.
В настройках squid (acl banners url_regex -i '/usr/local/squid/etc/ba') указано несколько довольно объемных файлов (50-60 Мб) со списком выражений для блокировки. Многим пользователям часто обрезает корректные сайты. Для разблокировки сайты помещаются или в отдельный файл (acl nobanners url_regex -i '/usr/local/squid/etc/noba'), или же некоторым юзерам дается полный доступ без ограничений. Понимаю, что скорее всего и регулярные выражения не слишком корректно введены и полный доступ не выход.
Вообщем, как оптимизировать это дело?
Думаю написать какую-то мини-программку на Perl для поиска выражений, которые блокируют тот или иной сайт. Какой лучше сделать алгоритм в этой программке? Может уже есть готовые решения?
squid 2.5.STABLE12, ОС SoL 18.0
Squid: блокировка корректных сайтов
В настройках squid (acl banners url_regex -i '/usr/local/squid/etc/ba') указано несколько довольно объемных файлов (50-60 Мб) со списком выражений для блокировки. Многим пользователям часто обрезает корректные сайты. Для разблокировки сайты помещаются или в отдельный файл (acl nobanners url_regex -i '/usr/local/squid/etc/noba'), или ...
эти сайти выбрасываютса из файлов которые отвечают за бан сайтов.
В файлах содержатся регулярные выражения, например, слово их трех букв, которое может встретиться в любом месте адреса. Вот и хочу оптимизировать поиск такого выражения в файлах, которые отвечают за бан сайтов.
sed - не?
В настройках squid (acl banners url_regex -i '/usr/local/squid/etc/ba') указано несколько довольно объемных файлов (50-60 Мб)
обычно требуется отыскать слово по шаблону. вы-же хотите найти шаблон по слову. так?
ИМХО для того что-бы задача выполнялась за обозримое время, можно сделать так:
1) создать огромный sed-скрипт (он займёт ~100Mb)
вот с помощью этого скрипта
[console]$ cat sq.sed
#!/bin/sed -rf
/~/{
W et.txt
d
}
1i\
#!/bin/sed -rnf
s/.*/s~^.*&.*$~\x26~p/
[/console]
Использование:
chmod +x sq.sed
./sq.sed sq.txt >sq1.txt
(Здесь sq.txt файл с регулярными выражениями)
chmod +x sq1.txt
echo "http://URL_для_проверки" | ./sq1.sed
Выдаст список RE, которые цепляют данный URL.
Их можно удалить ручками, или так:
sed -i*.bak '/найденное_выражение/d' sq.txt
2) этот скрипт (sq.sed) не работает с RE в которых есть символ "~", потому он такие RE записывает в файл исключений et.txt.
3) у вас несколько файлов. потому команду
./sq.sed sq.txt >sq1.txt
надо использовать так:
./sq.sed ba bb bc bd be >sq1.txt
4) всё это надо делать пользователем, что-бы ничего не испортить. Желательно сделать бекап.