Как я могу извлечь блок YAML с помощью AWK

#awk #yaml #text-processing

#авк #yaml #обработка текста

Вопрос:

Я хочу использовать AWK для извлечения блока YAML с разделителями ‘—‘ из файла, подобного следующему:

 ---
title: "This is a title"
sourceEditionDate: 1927-01-01
languages:
  - "latin"
tags:
  - poetry
---

Some other text I do not want to extract

 

со следующим результатом:

 title: "This is a title"
sourceEditionDate: 1927-01-01
languages:
  - "latin"
tags:
  - poetry
 

До сих пор я пробовал этот подход

 awk '/---/{p=0};p;/---/{p=1}' file
 

но я все равно получаю весь файл, включая нежелательную последнюю строку.

Комментарии:

1. Хотели бы вы использовать синтаксический анализатор YAML, подобный yq этому? — github.com/mikefarah/yq

2. Вы не можете получить выходные данные, которые вы опубликовали, из введенных вами данных, если вы не хотите добавить - "german" и - "danish" из скрипта.

3. Извините, я забыл их удалить. И спасибо за ответ — именно то, что я искал.

Ответ №1:

 $ awk '/---/{f=!f; next} f' file
title: "This is a title"
sourceEditionDate: 1927-01-01
languages:
  - "latin"
tags:
  - poetry
 

Ответ №2:

А также с awk вами можно получить тот же результат:

 awk '!/---/' file
title: "This is a title"
sourceEditionDate: 1927-01-01
languages:
  - "latin"
tags:
  - poetry