LINUX.ORG.RU
Ответ на: комментарий от dissident

mysql> select * from user_trc where `host` regexp '^10(\\.\\d+){3}$'\g
Empty set (0.01 sec)

mysql> select * from user_trc where `host` regexp '^10\\.'\g
+-------------+---------+-------------+---------+-------+
| ip          | type    | host        | bytes   | month |
+-------------+---------+-------------+---------+-------+
| 10.10.20.57 | OPTIONS | 10.10.20.2  |    1392 |     4 |
| 10.10.20.5  | GET     | 10.1.28.7   |  506222 |     4 |
| 10.10.20.5  | POST    | 10.10.20.12 | 3739811 |     4 |
| 10.10.20.5  | GET     | 10.10.20.12 | 7739341 |     4 |
| 10.10.20.85 | OPTIONS | 10.10.20.2  |    1392 |     4 |
| 10.10.20.85 | OPTIONS | 10.10.20.85 |    1394 |     4 |
+-------------+---------+-------------+---------+-------+
6 rows in set (0.00 sec)

mysql> select * from user_trc where `host` regexp '^10(\\.\d+){3}$'\g
Empty set (0.01 sec)

mysql> select * from user_trc where `host` regexp '^10(\.\d+){3}$'\g
Empty set (0.01 sec)

неработает :(
чего только уже не перепробывал
но дело в том что рабочий вариант не подходит потому как вдруг окажется какойнить 10.banner.bla.bla ....

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

Ну это уж надо читать регулярные выражения в mysql, они не везде одинаковые. В Perl эта строчка

perl -n -e 'print if /^10(\.\d+){3}$/' < ...

будет работать для твоих 'host'.

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

Лень ставить mysql но посмотрев сюда:

http://dev.mysql.com/doc/refman/5.0/en/regexp.html

Решил бы что может \d и {3} нету?

Ну тогда можно в лоб:

^10\.([0-9])+\.([0-9])+\.([0-9])+$

Это по идее должно работать везде.

если нужна проверка на то что значения после 10. находятся в диапазоне от 0 до 255 то хез, в перле бы использовал что-то вроде /e, а вообще проехался бы по match'ам split'ом с дополнительной проверкой потом просто да и все.

Как в mysql не знаю.



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

Как вариант можно извращнутся как-нибудь так:

echo "select * from user_trc where `host` regexp '^10\.'\g" | mysql | ./my_scipt

И в my_script еще поотцедить чем-нибудь человеческим.

mysql должно как-то так уметь чтобы выплюнуть на stdout и тут же умереть.

Если надо потом использовать данные для инсерта то снова их выплюнуть в mysql из этого чего-нибудь человеческого.

А вообще не знал что в SQL есть регекспы.

/me представил жуткую картину:

XSLT а в нем HTML а в нем PHP/JSP а в нем в "..." SQL а в нем в '...' regexp...

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

>Ну тогда можно в лоб:

>^10\.([0-9])+\.([0-9])+\.([0-9])+$ 

вот это работает, спасибо
mysql> select * from user_trc where `host` regexp '^10\\.([0-9])+\\.([0-9])+\\.([0-9])+$'\g
+-------------+---------+-------------+---------+-------+
| ip          | type    | host        | bytes   | month |
+-------------+---------+-------------+---------+-------+
| 10.10.20.57 | OPTIONS | 10.10.20.2  |    2784 |     4 |
| 10.10.20.5  | GET     | 10.1.28.7   |  506222 |     4 |
| 10.10.20.5  | POST    | 10.10.20.12 | 3739811 |     4 |
| 10.10.20.5  | GET     | 10.10.20.12 | 8608013 |     4 |
| 10.10.20.85 | OPTIONS | 10.10.20.2  |    2784 |     4 |
| 10.10.20.85 | OPTIONS | 10.10.20.85 |    1394 |     4 |
+-------------+---------+-------------+---------+-------+
6 rows in set (0.01 sec)

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

> есть хосты типа 100.smi.ru

Не попадет

> 10.ehrebyaty.ru

Не попадет под приведенный диссидентом регексп И вообще возьми селект по полю ip

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

>> есть хосты типа 100.smi.ru

>Не попадет

согласен, это пример

>> 10.ehrebyaty.ru

>Не попадет под приведенный диссидентом регексп И вообще возьми селект по полю ip 

согласен, мое предыдущее сообщение в ответ на использование LIKE  вместо  regexp.

селект по полю ip мне не нужен, мне нужно исключить трафик корпоративный из общей массы, вот кусок всей таблицы, там не  только ip-адреса, в конечном итоге заработавший запрос с регексом я переделал из селекта в делит
mysql> select * from user_trc limit 12, 18
    -> \g
+--------------+------+------------------------------+---------+-------+
| ip           | type | host                         | bytes   | month 
+--------------+------+------------------------------+---------+-------+
| 10.10.20.19  | GET  | im0-tub.yandex.ru            |    8911 |     4 
| 10.10.20.19  | GET  | clck.yandex.ru               |   22264 |     4 
| 10.10.20.19  | GET  | mirsnov.com                  |  940435 |     4
| 10.10.20.19  | GET  | counter.yadro.ru             |  122008 |     4 
| 10.10.20.19  | GET  | autocontext.begun.ru         |  342841 |     4 
| 10.10.20.19  | GET  | 091005231047.c.mystat-in.net |   13816 |     4 
| 10.10.20.19  | GET  | www.100-100.ru               |  561705 |     4 
| 10.10.20.19  | GET  | www.fun.lbn.ru               |   68513 |     4 
| 10.10.20.19  | GET  | fun.lbn.ru                   |   71425 |     4 
| 10.10.20.42  | GET  | javadl-esd.sun.com           |    1314 |     4 
| 10.10.20.250 | GET  | counter.rambler.ru           | 1429579 |     4 
| 10.10.20.250 | GET  | ad.adriver.ru                |   41848 |     4 
| 10.10.20.250 | GET  | 217.16.26.60                 |     253 |     4 
| 10.10.20.250 | GET  | top.list.ru                  |   19068 |     4 
| 10.10.20.250 | GET  | top3.list.ru                 |   12347 |     4 
| 10.10.20.250 | GET  | www.rambler.ru               | 1054005 |     4 
| 10.10.20.55  | GET  | top.mail.ru                  |  185285 |     4 
| 10.10.20.5   | GET  | warlog.info                  |    5332 |     4 
+--------------+------+------------------------------+---------+-------+

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

Я ориентировался на

"...выражение которое отлавливает все ^адреса^ хостов этой сети...".

iBliss
()

/10\.([01]?\d\d|2[0-4]\d|25[0-5])\. ([01]?\d\d|2[0-4]\d|25[0-5])\.([01]?\d\d|2[0-4]\d|25[0-5])/

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