PDA

Просмотр полной версии : поиск текста по маске


meisterr
01.02.2010, 01:31
есть txt файл с таким содержанием:



...
http://site1.ru/index.php
username=lol1@lol.ru
password=parol
*
http://site2.ru/
Login=lol2
Password=parol
*
http://site3.ru/index.php
login_name=lol3
login_password=parol
*
http://site4.ru/
login=lol
passwd=parol
...


нужно из этого выдрать только мыло-пароль от http://site1.ru и сложить все в такой вид:
lol1@lol.ru;parol

чем можно это всё организовать?

SpangeBoB
01.02.2010, 13:08
Ос не указана,так что решу на PowerShell:

$file="file.txt"
foreach ($i in (gc $file) -match "(\w+=) -replace "\w+=","") {[void]$foreach.movenext();$i+";"+$foreach.current }

Вывод:
lol1@lol.ru;parol
lol2;parol
lol3;parol
lol;parol

Если требуется что в username было @ и site1.ru,то можно так:
$file="file.txt"
$array = (gc file.txt) -match "\w+" -replace "\w+="
for ($i=0;$i -lt $array.count;$i+=3) { if (($array[$i+1] -match "@") -and ($array[$i] -match "http://site1.ru")){$array[$i+1] + ";" + $array[$i+2]}}

Вывод:
lol1@lol.ru;parol

.Slip
01.02.2010, 15:10
От нечего делать:
#!/usr/bin/perl
open(FILE, "<333.txt");
my $usr, my $pwd;
while(my $file = <FILE>)
{
if($file =~ /.*pass.*=(.+)/i) { $pwd = $1; }
elsif($file =~ /(login.*=|user.*=)(.+)/i) { $usr = $+; }
elsif($file =~ /\*/) { print $usr, ";", $pwd, "\n"; }
}
close FILE;

Cthulchu
01.02.2010, 16:38
написал на питоне 2.5
есть проверка на "@" в логине, чтобы небыло конфузов. Все, что в комментариях (после #) можно убрать, это я для себя оставил - экспериментировал.
Нормально работает только на ".ru/" доменах и если все линки начинаются с "http://" ну и так далее...
Написано говняно (в плане красоты и читабельности), ибо я только учу его.
import string
#str='string'
a=-1
f = open ('c:\\1.txt', 'r')
#f1 = open ('c:\\result.txt', 'a')
x = f.readlines()
for l in x:
a+=1
if l.startswith('http'):
link=x[a]
#link[7:link.find(".ru/")+3]
usr=x[a+1]
pwd=x[a+2]
pwd=pwd.strip()
usr=usr.strip()
key, user = usr.split('=', 1)
key1, passw = pwd.split('=', 1)
if "@" not in user:
user=user+"@"+link[7:link.find(".ru/")+3]
print (user+";"+passw)
#print (cl[found:foundEnd])
#f1.write(cl[found:foundEnd])
#f1.write("""
#""")
f.close
#f1.close
вывод:
lol1@lol.ru;parol
lol2@site2.ru;parol
lol3@site3.ru;parol
lol@site4.ru;parol

meisterr
01.02.2010, 20:02
спасибо всем. подсказали способ как все сделать в екселе:

Открой файл в Экселе, включи автофильтр с условием "содержит site1.ru", в первую отфильтрованную строку введи формулу, которая вытащит данные их двух строк ниже нее, скопируй формулу дальше по столбцу. См. вложение.
Потом можешь скопировать столбец с формулами и вставить в текст. файл.
Формула берет текст правее знака "=", чтобы не делать различия между "username" и "login" и т.п.

.Slip
02.02.2010, 07:59
Реабилитация утреннего тупняка:
#!/usr/bin/perl
open(FILE, "<333.txt");
while(my $file = <FILE>)
{
$file =~ /.+d=(.+)\n*|.+=(.+)/; if($2) { print $2; } if($1) { print ';', $1, "\n"; }
}
close FILE;
Если без домена, по примеру