2012-06-26 2 views
1

ожидаемое спасибо.Perl wget не «greping» правильно

Эта петля обеспечивает URL-адрес (в переменных $ _) и моя идея будет посылать каждое URL в Wget для обработки, как вы можете увидеть

foreach(@my_array) { 
    $browser->get($_);  
    system ("wget -q -O -\"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' | sort -u"); 
} 
print EMAILS; 

вопросов:

1) grep не grep, я получаю только URL-адреса, которые являются $ _

2) Я не совсем уверен, что правильно отправляю результат в выходной файл, так как все, что я делаю, - это EMAILS, где EMAILS является дескриптор выходного файла, созданного строками выше.

3) Я попытался сделать еще один вариант, полагая а> output.txt внедрен в скобках,

system ("wget -q -O -\"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' > output.txt| sort -u"); 

но игнорируется

4) Вопрос, является ли, что Grep делается во время обхода на серверах или wget должен загружать все файлы, и только тогда на моем компьютере grep все электронные письма? Естественно, я не хочу загружать весь сайт.

спасибо много

+1

Почему бы вам не объяснить, что должен делать ваш системный вызов. Вы пытаетесь загрузить загруженную веб-страницу? – TLP

+0

Да, wget получает URL-адрес, который должен быть указан, который содержится в $ _. Так как он должен просканировать через всю сеть, он будет иметь -r рекурсивную команду. Этот grep получает сообщения электронной почты. Однако в выходном файле я получаю только список URL-адресов wget, но grep не доставляет мне письма в этой команде perl, хотя он действительно работал в оболочке – iaintunderstand

ответ

2

Grep выполняется после того, как Wget закончена (загрузка всех файлов). Кроме того, вывод в файл не будет передавать правильную информацию команде sort.

LWP может быть более полезным при просмотре веб-страниц по адресам электронной почты.

http://search.cpan.org/dist/libwww-perl/lib/LWP.pm

+0

Большое спасибо, я прочитаю Это. (положительный момент для Корпуса морской пехоты :) О, кстати, на самом деле я использую Mechanize, который получен из LWP, то есть для $ browser -> $ _. но как бы вы это сделали? Возможно ли использовать команду содержимого для загрузки ее в виде текста? или вы имеете в виду, что я мог бы разместить это регулярное выражение так, чтобы он выбирал электронные письма на месте, не загружая их? Любопытно, что у Mechanize есть встроенные функции для fech URL-адресов (именно так я их получил), но у него нет этого для писем – iaintunderstand

+0

@iaintunderstand YUTT !! – ZnArK

+0

@ iaintunderstand похоже, что вы будете использовать '$ mech-> get ($ uri); $ mech-> content (...); 'Последнее будет возвращать содержимое тела, которое вы могли бы использовать regex для удаления сообщений электронной почты. http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize.pm – ZnArK

1

Похоже, вы забыли пространства перед URL:

system ("wget -q -O - \"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' | sort -u"); 
+0

Спасибо, я могу только попробовать это завтра, так что я не знаю, могло ли это быть проблемой. Не могли бы? Я действительно получил URL-адреса, напечатанные в файле, будет ли нехватка места причиной того, что grep не сработает? – iaintunderstand

1

отсутствующего пространства перед URL. Повторная нагрузка ранжирована.

system("wget -q -O - \"$_\" | grep -oe '\\w*.\\w*@.\\w*.\\w\\+' | sort -u >output.txt"); 

Что заставляет вас думать system изменения $_?

+0

Что заставляет меня думать о системных изменениях $ _? Моя визуализация этого будет заключаться в том, что wget перейдет на URL-адреса, содержащиеся в $ _, загрузите и выполните grepping. Другой вопрос, который возникает, заключается в том, как происходит этот цикл. Проходит ли wget со всей загрузкой сети, выполняет grep, получает электронные письма и затем продолжает следующий URL-адрес? – iaintunderstand

+0

«Моя визуализация будет состоять в том, что wget будет обращаться к URL-адресам, содержащимся в $ _, загружать и выполнять grepping впоследствии». И какая часть этого, по вашему мнению, меняет $ _? или даже знает о $ _? – ikegami

+0

'wget', вероятно, выводит то, что получает, как только он его получает, хотя выход может быть буферизирован (часто в 4k кусках). – ikegami

Смежные вопросы