Я хотел применить некоторые синтаксические анализаторы XML, но представленный «Контекст» вообще не соответствует допустимой структуре XML (недопустимые атрибуты file:abc.txt
, недопустимые закрывающие теги <\host >
, <\hostfile>
).
Итак, вот gawk "hack":
awk 'BEGIN{ RS="<hostfile" }/file:/{ f = substr($1,6,length($1)-6) }
/<host>/{ match($0,/.*<host>([^<>]+)<\\host>[[:space:]]*<\\hostfile>.*$/,a);
printf("Input: %s\nOutput: %s\n\n",a[1],f)}' yourfile
Вывод:
Input: xyz.com
Output: abc.txt
Input: asd.com
Output: xyz.txt
Решение с использованием инструмента xmstarlet :
xmlstarlet sel -t -v "/p/text()[2]" -n file | sed 's/.*"\(.*\)"/\1/'
Вывод:
Massive demographic change has political consequences.
sel
option
sel (or select) - Выбрать данные или запросить XML документ (ы) (XPATH и т. д.)
-t
--template options
-v
option
-v или --value-of - распечатать значение выражения XPATH
/ p / text () [2]
- выражение XPath, выбирает второй текстовый узел абзаца (первый текстовый узел - .
)
sed 's /.* "\ ( . * \) "/ \ 1 / '
- для извлечения сообщения между двойными кавычками