LINUX.ORG.RU

В python свои особые регулярные выражения или я неправильно их использую?

 ,


0

1

Доброго времени суток

первое что удивило, что python всегда привязывает регексп к началу строки, как если бы я вместо re.compile('sshd') писал re.compile('^sshd'). Но даже если я заменю на re.compile('.*sshd'), питон всё рано не может найти соответствия там, где его видят и perl, и grep

perl:

# cat test.pl
#!/usr/bin/perl

use strict;
use Data::Dumper;

open FILE, "/proc/26673370/psinfo";
my $content = join("", <FILE>);
close FILE;

printf "%s\n", Dumper($content);
if ( $content =~ m/sshd/ ) {
        printf "match found\n";
}
# ./test.pl 
$VAR1 = 'AA���r�r�r�
\\��T\'�`��/�/�/�/�sshdsshd: ok@pts/0 }��
}AS<COTHER����';

match found

grep:

# cat /proc/26673370/psinfo | grep  sshd

# echo $?
0
# cat /proc/26673370/psinfo | grep  sshc
# echo $?
1

python:

# cat test.py 
#!/usr/bin/python

import os
import re
import pprint

re_ssh = re.compile('.*sshd')
filename = os.path.join('/proc', '26673370', 'psinfo')
content = open(filename, 'rb').read()
c = ''.join(content)
m = re_ssh.match(c)

print c
if m:
    print "match found"

print ""

pprint.pprint(c)

# ./test.py 
AA���r�r�r�
\��T'�`��/�/�/�/�sshdsshd: ok@pts/0 }��
}AS<COTHER����

"\x00\x00\x00\x01\x00\x04\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02A\x00\x00\x00\x00\x00\x00\x02A\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x01\x97\x00\xda\x00\x00\x00\x00\x01\x9b\x00r\x00\x00\x00\x00\x01\x9b\x00r\x00\x00\x00\x00\x01\x9b\x00r\x00\x00\x00\x00\x00\x00\x00\x00\xf1\x00\x0f\n\x00\x06\\\x00\x00\x00\x00\x00\x00\x00\x05\xd8\x00\x00\x00\x00\x00\x00\x04\xb8\x00\x00\x00\x00T'\xad`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\xee\x1e\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00/\xf2/\x80\x00\x00\x00\x00/\xf2/\xf4sshd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00sshd: ok@pts/0 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00}\x00\xe3\xf1\x00\x0f\n\x10\x00}\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00A\x04\x00\x01\x03S<\x00\x00\x00C\x00\x00\x00\x00OTHER\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"

# ps -ef | grep -i ssh
    root  5177558  3670170   0 08:38:58      -  0:00 /usr/sbin/sshd
      ok 26673370 26935410   1 10:40:32      -  0:00 sshd: ok@pts/0
    root 26935410  5177558   0 10:40:30      -  0:00 sshd: ok [priv]

# locale
LANG=POSIX
LC_COLLATE="POSIX"
LC_CTYPE="POSIX"
LC_MONETARY="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_MESSAGES="POSIX"
LC_ALL=POSIX
★★★★★

что python всегда привязывает регексп

не python а re.match(). есть re.search(), которая не

всё рано не может найти соответствия

добавь re.M во флаги, например. у тебя там бинарные а не текстоые данные

anonymous
()

man re_ssh.search

anonymous
()

Вместо того, чтобы такой обширный ОП малевать, лучше бы доки по модулю почитал.

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