Официальный сайт студ.городка НГТУ
Software » [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки 

#1  01.07.10 21:19

[perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

не могу понять экранируются ли ковычки в линкусе. нужно извлечь строки удовлетворяющие одному из условий, делаю так

Код: perl:

#!/usr/bin/perl
 
my $ok = 20;
my $patern1='"GET / HTTP/1.1" 200 582 "-" "Opera/9.02 (Windows NT 5.1; U; ru)"';
#my $patern2='"GET / HTTP/1.1" 200 582 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"';
 
@iplist = `cat /var/log/nginx/access.log | grep '$patern2' | awk '{print \$1}' | sort -u`; // выдёргиваем айпи попавшие под условия
 
 
for (@iplist)
{
    chop;
    #$ip = $_;
    $num = `cat /var/log/nginx/access.log | grep '$_' | wc -l | awk '{print \$1}'`; //считаем сколько раз айпи встречается в логе
    #print "-$num\n";
    if($num > $ok)
    {
    #print "$_ $num - ban\n";
        system("/sbin/ipfw table 4 add $_"); # adding address to table 5
    }
}
 
system("echo '' > /var/log/nginx/access.log"); # чисти лог веб сервера
system("/sbin/ipfw table 4 list > /usr/src/flood_ip.txt") # сохраняем айпи


как в греп включить $patern2 ?

Исправлено qwas3 (01.07.10 21:20)

Offline

#2  01.07.10 21:50

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

my $pattern2 = "\'blah blah blah\'";
@iplist = `cat /var/log/nginx/access.log | grep $pattern2 | awk '{print \$1}' | sort -u`;

Хотя у меня и так заработало:

my $pattern2 = "blah blah blah";
@iplist = `cat /var/log/nginx/access.log | grep '$pattern2' | awk '{print \$1}' | sort -u`;

Или вопрос был в ["] внутри pattern2? Просто \ перед ними поставить да и всё.

Думайте проще=)

Исправлено Com[N-Line] (01.07.10 21:55)

Offline

#3  02.07.10 09:46

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

мне нужно сразу две подстроки искать, то есть что-то типа

@iplist = `cat /var/log/nginx/access.log | grep ('$patern1' | '$patern2') | awk '{print \$1}' | sort -u`;

Offline

#4  02.07.10 11:49

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

@iplist = `cat file | grep '$pattern1\|$pattern2' | awk ... | sort -u`;

Исправлено Com[N-Line] (02.07.10 11:56)

Offline

#5  02.07.10 12:37

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

Com[N-Line] написал(а):

'$pattern1\|$pattern2'

не ищет

Offline

#6  02.07.10 13:19

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

переделал, работает

Код: perl:

#!/usr/bin/perl
 
my $ok = 20;
my $p1='\"GET \/ HTTP\/1\.1\" 200 582 \"\-\" \"Opera\/9\.02 \(Windows NT 5\.1\; U\; ru\)\"';
my $p2='\"GET \/ HTTP\/1\.1\" 200 582 \"\-\" \"Mozilla\/5\.0 \(Windows\; U\; Windows NT 5\.1\; ru\; rv\:1\.8\.1\.1\) Gecko\/20061204 Firefox\/2\.0\.0\.1\"';
my $p3='\"GET \/ HTTP\/1\.1\" 200 582 \"\-\" \"Mozilla\/4.0 \(compatible\; MSIE 6.0\; Windows NT 5.1\; SV1\; \.NET CLR 1\.1\.4322\)\"';
my $logfile = '/var/log/nginx/access.log';
 
@iplist = `cat '$logfile' | grep -E '($p1|$p2|$p3)' | awk '{print \$1}' | sort -u`;
 
...

Исправлено qwas3 (02.07.10 13:19)

Offline

#7  02.07.10 14:13

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

qwas3 написал(а):

переделал, работает

Код: perl:

#!/usr/bin/perl
 
my $ok = 20;
my $p1='\"GET \/ HTTP\/1\.1\" 200 582 \"\-\" \"Opera\/9\.02 \(Windows NT 5\.1\; U\; ru\)\"';
my $p2='\"GET \/ HTTP\/1\.1\" 200 582 \"\-\" \"Mozilla\/5\.0 \(Windows\; U\; Windows NT 5\.1\; ru\; rv\:1\.8\.1\.1\) Gecko\/20061204 Firefox\/2\.0\.0\.1\"';
my $p3='\"GET \/ HTTP\/1\.1\" 200 582 \"\-\" \"Mozilla\/4.0 \(compatible\; MSIE 6.0\; Windows NT 5.1\; SV1\; \.NET CLR 1\.1\.4322\)\"';
my $logfile = '/var/log/nginx/access.log';
 
@iplist = `cat '$logfile' | grep -E '($p1|$p2|$p3)' | awk '{print \$1}' | sort -u`;
 
...

Я думаю проверок на юзерагент в перле есть и без велосипеда и к тому же в одну строчку.

Offline

#8  02.07.10 17:12

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

qwas3 написал(а):

Com[N-Line написал(а):

]'$pattern1\|$pattern2'

не ищет

А у меня ищет :P

Offline

#9  02.07.10 22:24

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

otaku написал(а):

Я думаю проверок на юзерагент

а мне не юзер агент проверять нада было

Offline

#10  03.07.10 17:52

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

Укроп написал(а):

Com[N-Line], возмжно у вас разные параметры к grep
проверь alias

Это не я бляяя...

Offline

#11  05.07.10 13:56

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

qwas3 написал(а):

otaku написал(а):

Я думаю проверок на юзерагент

а мне не юзер агент проверять нада было

ну анализаторов логов нгинкса апача тоже выше крыши, без велосипедов

Offline

#12  28.08.10 22:19

kai
Профиль

Re: [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки

qwas3 написал(а):

переделал, работает

Код: perl:

#!/usr/bin/perl
 
my $ok = 20;
my $p1='\"GET \/ HTTP\/1\.1\" 200 582 \"\-\" \"Opera\/9\.02 \(Windows NT 5\.1\; U\; ru\)\"';
my $p2='\"GET \/ HTTP\/1\.1\" 200 582 \"\-\" \"Mozilla\/5\.0 \(Windows\; U\; Windows NT 5\.1\; ru\; rv\:1\.8\.1\.1\) Gecko\/20061204 Firefox\/2\.0\.0\.1\"';
my $p3='\"GET \/ HTTP\/1\.1\" 200 582 \"\-\" \"Mozilla\/4.0 \(compatible\; MSIE 6.0\; Windows NT 5.1\; SV1\; \.NET CLR 1\.1\.4322\)\"';
my $logfile = '/var/log/nginx/access.log';
 
@iplist = `cat '$logfile' | grep -E '($p1|$p2|$p3)' | awk '{print \$1}' | sort -u`;
 
...

Смесь носорога с педагогом.
зачем тебе  в коде перла использовать строку

Код::

@iplist = `cat '$logfile' | grep -E '($p1|$p2|$p3)' | awk '{print \$1}' | sort -u`;

когда в нем есть свой regex более мощный чем в bash.

Offline

Software » [perl&grep] извлечь две подстроки из строки. в подстроке есть ковычки 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.092 сек.
Выполнено 14 запросов.