<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Разбить лог регулярными выражениями</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7550.html</link>
    <description>Привет всем&lt;br&gt;Есть логфайл состоящий из записей вида &quot;$date $time: $log_text&quot;&lt;br&gt;формат $date $time нам известен&lt;br&gt;$log_text - может быть многострочным&lt;br&gt;&lt;br&gt;подскажите плиз как из этого файла выудить каждую такую запись с помощью регекспа. В смысле мне нужно поочередно вынуть каждую запись и обработать ее.&lt;br&gt;&lt;br&gt;сильно не пинайте плиз&lt;br&gt;с Perl только знакомлюсь&lt;br&gt;</description>

<item>
    <title>Разбить лог регулярными выражениями (Guest)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7550.html#6</link>
    <pubDate>Mon, 18 Aug 2008 16:10:21 GMT</pubDate>
    <description>&amp;gt;Ее стоит заменить на &lt;br&gt;&amp;gt;$text.=$_; &lt;br&gt;&lt;br&gt;Угу.&lt;br&gt;</description>
</item>

<item>
    <title>Разбить лог регулярными выражениями (angra)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7550.html#5</link>
    <pubDate>Mon, 18 Aug 2008 15:46:12 GMT</pubDate>
    <description>Если этот регекс не сработает:&lt;br&gt;&amp;gt;  if (/^(&#092;d&#123;4&#125;-&#092;d&#123;2&#125;-&#092;d&#123;2&#125; &#092;d&#123;2&#125;:&#092;d&#123;2&#125;:&#092;d&#123;2&#125;): (.*)/) &#123; &lt;br&gt;&lt;br&gt;то в $2 будет undef и следующая строка не верна: &lt;br&gt;&amp;gt;    $text .= $2; &lt;br&gt;&lt;br&gt;Ее стоит заменить на &lt;br&gt;$text.=$_;&lt;br&gt;&lt;br&gt;Альтернативно можно первый захват сделать условным поставив после него &quot;?&quot;, но тогда проверять на пустоту $1&lt;br&gt;&lt;br&gt;Простая иллюстрация всех случаев:&lt;br&gt;$ perl -le &apos;$_=&quot;ab&quot;;/(a)(b)/; print &quot;1:$1 2:$2&quot;&apos;&lt;br&gt;1:a 2:b&lt;br&gt;$ perl -le &apos;$_=&quot;b&quot;;/(a)(b)/; print &quot;1:$1 2:$2&quot;&apos;&lt;br&gt;1: 2:&lt;br&gt;$ perl -le &apos;$_=&quot;b&quot;;/(a)?(b)/; print &quot;1:$1 2:$2&quot;&apos;&lt;br&gt;1: 2:b&lt;br&gt;$ perl -le &apos;$_=&quot;ab&quot;;/(a)?(b)/; print &quot;1:$1 2:$2&quot;&apos;&lt;br&gt;1:a 2:b&lt;br&gt;</description>
</item>

<item>
    <title>Разбить лог регулярными выражениями (Guest)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7550.html#4</link>
    <pubDate>Mon, 18 Aug 2008 15:01:10 GMT</pubDate>
    <description>&amp;gt;А можно ли работать с этим логом не с каждой строчкой отдельно &lt;br&gt;&amp;gt;- а как с мультилайном? &lt;br&gt;&amp;gt;И одним регекспом выкусывать оттуда нуобходимые записи? &lt;br&gt;&lt;br&gt;Наверное можно, только нужно ли? По сколько нужно будет читать из лога, чтобы все сообщение влезло? Придется дополнительно писать работу с буфферами. multiline регэкспы предпочитаю вообще не использовать.&lt;br&gt;</description>
</item>

<item>
    <title>Разбить лог регулярными выражениями (Retiff)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7550.html#3</link>
    <pubDate>Mon, 18 Aug 2008 13:58:48 GMT</pubDate>
    <description>Спасибо агромное :)&lt;br&gt;саму идею понял&lt;br&gt;&lt;br&gt;формат $date/$time нам известен - составить под него регексп не проблема&lt;br&gt;&lt;br&gt;А можно ли работать с этим логом не с каждой строчкой отдельно - а как с мультилайном?&lt;br&gt;И одним регекспом выкусывать оттуда нуобходимые записи?&lt;br&gt;</description>
</item>

<item>
    <title>Разбить лог регулярными выражениями (Guest)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7550.html#2</link>
    <pubDate>Mon, 18 Aug 2008 13:24:04 GMT</pubDate>
    <description>Звиняюсь.&lt;br&gt;&lt;br&gt;&amp;gt;while(&amp;lt;STDIN&amp;gt;) &#123;&lt;br&gt;&amp;gt;  my $date, $text; &lt;br&gt;&lt;br&gt;my $date, $text, разумеется, должны быть объявлено перед while.&lt;br&gt;</description>
</item>

<item>
    <title>Разбить лог регулярными выражениями (Guest)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7550.html#1</link>
    <pubDate>Mon, 18 Aug 2008 13:22:50 GMT</pubDate>
    <description>&amp;gt;Привет всем &lt;br&gt;&amp;gt;Есть логфайл состоящий из записей вида &quot;$date $time: $log_text&quot; &lt;br&gt;&amp;gt;формат $date $time нам известен &lt;br&gt;&amp;gt;$log_text - может быть многострочным &lt;br&gt;&lt;br&gt;Если формат $date/$time неизвестен, там может быть что угодно, в том числе переводы строк, двоеточие и любые другие символы, тогда задача не решаема.&lt;br&gt;&lt;br&gt;Советую подумать насчет того, как представить дату/время в виде регэкспа или набора регэкспов. Вот пример для записей вида&lt;br&gt;&lt;br&gt;YYYY-MM-DD HH:MM:SS: text&lt;br&gt;text&lt;br&gt;text&lt;br&gt;&lt;br&gt;while(&amp;lt;STDIN&amp;gt;) &#123;&lt;br&gt;  my $date, $text;&lt;br&gt;  if (/^(&#092;d&#123;4&#125;-&#092;d&#123;2&#125;-&#092;d&#123;2&#125; &#092;d&#123;2&#125;:&#092;d&#123;2&#125;:&#092;d&#123;2&#125;): (.*)/) &#123;&lt;br&gt;    process_entry($date, $text) if (defined $date &amp;&amp; defined $text);&lt;br&gt;    $date = $1;&lt;br&gt;    $text = $2;&lt;br&gt;  &#125; else &#123;&lt;br&gt;    $text .= $2;&lt;br&gt;  &#125;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;process_entry($date, $text) if (defined $date &amp;&amp; defined $text);&lt;br&gt;&lt;br&gt;sub process_entry &#123;&lt;br&gt;  my($date, $text) = &#064;_;&lt;br&gt;  # обработка записи&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Если дата в сложном формате - вопрос только в том, чтобы узнать, начинается строка с даты или нет. Это может быть набор регэкспов иил что-то другое, вам виднее.&lt;br&gt;</description>
</item>

</channel>
</rss>
