Я не очень хорошо знаком с regex, sed и т. д. и немного ленив, чтобы понять это в этот момент, так как я могу извлечь эту строку:
<yweather:astronomy sunrise="6:50 am" sunset="7:06 pm"/>
Дайте мне знать, если требуется больше структуры xml.
Вы не используете regex или sed. Вы используете парсер XML и язык запросов XML (XPath или XQuery). И я боюсь, что детали зависят от контекста: например, «yweather» - это короткое имя (префикс) для пространства имен, и вам нужно знать, какое пространство имен оно представляет.
Правильный ответ, как говорит Майкл Кей, заключается в использовании инструмента, специфичного для XML.
Для быстрого и грязного решения здесь применяется подход sed. Начнем с этого файла:
$ cat file
<yweather:astronomy sunrise="6:50 am" sunset="7:06 pm"/>
Чтобы извлечь время заката:
$ sed -rn 's/.*sunset="([^"]*)".*/\1/p' file
7:06 pm
Чтобы понять регулярное выражение, разделим его на три части:
.* совпадает с началом строки до второй части. Эта часть sunset="([^"]*)" соответствует символам sunset=", за которыми следует любое количество символов, кроме ", а затем закрытие ". Выражение [^"] означает любой символ, кроме " и [^"]* означает любое количество таких символов. Параны (...) захватывают символы внутри "..." в группе sed sed 1, которую мы позже называем \1. .* соответствует всем символам после выражения заката.