Как использовать sed, awk или grep для удаления определенного шаблона, но сохранить все остальное

Я хотел применить некоторые синтаксические анализаторы 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
0
18.04.2017, 05:24
1 ответ

Решение с использованием инструмента 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 / ' - для извлечения сообщения между двойными кавычками

4
28.01.2020, 02:19

Теги

Похожие вопросы