<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Поиск блоков текста</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7723.html</link>
    <description>Приветствую сообщество!&lt;br&gt;&lt;br&gt;Стоит задача выудить из текста, состоящего из блоков вида&lt;br&gt;&#091;code&#093;BEGIN some label&lt;br&gt;some text&lt;br&gt;...&lt;br&gt;END&#091;/code&#093;&lt;br&gt;только блоки, содержащие между строками BEGIN/END определённые строки, которые можно определить регулярным выражением. К примеру, начинающиеся с определённого слова. В идеале хотелось бы ещё вырезать строки между началом каждого блока и первой ключевой строкой.&lt;br&gt;&lt;br&gt;Представляю, как это сделать на perl или, скажем, на C. Но очень хотелось бы иметь это в виде одно-двухстрочного скрипта с использованием grep/sed/awk/etc. В виду недостаточного знания перечисленных инструментов, не могу понять, возможно ли это и если да, то чем проще сделать. А читать всю документацию по всем этим инструментам сейчас нет времени. Так что если кто-нибудь навскидку может сказать, как примерно это сделать (или, например, что сделать это таким путём невозможно), буду премного благодарен.&lt;br&gt;&lt;br&gt;Для наглядности приведу пример входных и выходных данных. Признаком ключевой строки будем считать &apos;WORD&apos; в нача</description>

<item>
    <title>Поиск блоков текста (Fylhtq)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7723.html#2</link>
    <pubDate>Wed, 26 Nov 2008 14:53:04 GMT</pubDate>
    <description>&amp;gt;Приветствую сообщество! &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Стоит задача выудить из текста, состоящего из блоков вида &lt;br&gt;&lt;br&gt;Однострочника не получится, sed не обрабатывает перевод строки, к сожалению.&lt;br&gt;&lt;br&gt;#!/sbin/sh&lt;br&gt;A=&quot;&quot;&lt;br&gt;for I in &apos;grep -e &quot;BEGIN&quot; -e &quot;END&quot; -e &quot;WORD&quot; file.txt&apos;&lt;br&gt;do&lt;br&gt; &#091; &#096;echo $I&amp;#124;cut -f1&#096; = &quot;WORD&quot; &#093;&amp;&amp;echo $A&lt;br&gt; &#091; &#096;echo $I&amp;#124;cut -f1&#096; = &quot;END&quot; -a  &#096;echo $A&amp;#124;cut -f1&#096; = &quot;WORD&quot; &#093;&amp;&amp;echo $I&lt;br&gt; A=$I&lt;br&gt;done&lt;br&gt;&lt;br&gt;Как-то так. Не проверял, ибо рабочий день ёк и домой пора :)&lt;br&gt;</description>
</item>

<item>
    <title>Поиск блоков текста (angra)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7723.html#1</link>
    <pubDate>Tue, 25 Nov 2008 03:53:19 GMT</pubDate>
    <description>Любопытно почему все-таки не однострочник на perl? ИМХО perl чаще можно встретить чем _нужную_ версию grep/sed/awk. А вообще задача на составление одного регекса, вот только он не тривиален, а я привык к перловым регексам и нет желания писать его для POSIX или еще чего-нибудь, особенно с учетом того, что вы так и не уточнили какая именно из существующих реализаций регексов вам нужна. На pcre это будет что-то вроде &lt;br&gt;/^BEGIN(?:.(?!^END))*^WORD(?:.(?!^END))*.^END$/smg&lt;br&gt;</description>
</item>

</channel>
</rss>
