В скрипте bash (в Ubuntu 14.04) я запускаю команду:
WP055="$(wget -qO - http://alerts.weather.gov/cap/wwaatmget.php?x=CAZ055&y=1)"
В строке переменной WP055 будет неизвестное число пар «<title>» и «</ title>». Мне нужно искать в каждой из этих пар строку «по NWS», что означает, что эта конкретная строка содержит время начала и окончания конкретной информации о погоде. Эта найденная строка (все символы между открывающим и закрывающим тегами заголовка) - это то, что я хочу записать в другую переменную, чтобы я мог перетащить ее в файл index.html, который создает скрипт.
Я планировал перебирать переменную WP055 x количество раз, анализируя текст в каждой паре тегов, пока не найду правильный.
Я не могу найти WP055 для «по NWS», потому что в WP055 может быть более одного вхождения (несколько рекомендаций в строке WP055).
(Приведенная выше команда wget определенно будет иметь строку «by NWS» во 2-й паре заголовков до 07 марта в 3:00 по тихоокеанскому времени, когда текущее уведомление о ветре будет отменено.)
Ответы:
Немного неполированный, но, похоже, работает:
remainder=${WP055#*<title>}
это форма раскрытия параметров, которая удаляет соответствующий шаблон префикса. Здесь он устанавливаетremainder
для<title>
),</title>
иЕсли
"$WP055" = "$remainder"
, это означает, что оболочка не найдена<title>
в строке.this_title=${remainder%%</title>*}
Аналогично устанавливаетсяthis_title
, что$remainder
до , но не включая первый</title>
.if [[ something1 == something2 ]]
с двойными скобками ([[ … ]]
) и двойным знаком равенства (==
) соответствует шаблону. Все остальное - повторение.Это может вести себя странно при неправильном вводе; т.е. текст, где
<title>
и</title>
не встречаются в чередующихся парах.источник