Получение строк между специальным символьным шаблоном

Ниже мой входной файл:

---
{
  "date":"2015-09-24",
  "title":"Getting Started with Git",
  "template":"post",
  "thumbnail":"content/thumbnails/test.jpeg",
  "slug":"getting-started-with-git",
  "categories":[ "cat1", "Focus", "Mustang" ],
  "tags":[ "Fiesta", "Focus", "Mustang" ]
}
---

#Hello

---
This is sample
---

```
var x=1;
entry.forEach(function(item){
    x=x++;
})
```

То, что я ожидаю в выводе, строки между первыми 2 '---'

{
  "date":"2015-09-24",
  "title":"Getting Started with Git",
  "template":"post",
  "thumbnail":"content/thumbnails/test.jpeg",
  "slug":"getting-started-with-git",
  "categories":[ "cat1", "Focus", "Mustang" ],
  "tags":[ "Fiesta", "Focus", "Mustang" ]
}

Как я могу достигнуть его? Используя awk, я могу достигнуть этого, только если я заменяю '---' некоторой строкой, любят, 'запускают'/'end'.

awk '/start/{f=1;next} /end/{f=0;exit} f'  $FILE_PATH
3
задан 22 November 2019 в 23:44

2 ответа

Вот одно решение:

awk '/^---/ {mark++; next} mark == 1 {print}' $FILE_PATH

, Который производит:

{
  "date":"2015-09-24",
  "title":"Getting Started with Git",
  "template":"post",
  "thumbnail":"content/thumbnails/test.jpeg",
  "slug":"getting-started-with-git",
  "categories":[ "cat1", "Focus", "Mustang" ],
  "tags":[ "Fiesta", "Focus", "Mustang" ]
}

Это увеличивает переменную, названную mark каждый раз, когда она встречается --- строка. Мы только печатаем строки когда mark == 1. Это - хорошее решение, потому что оно позволит Вам извлечь abitrary блоки --- разделенный текст. Таким образом, если бы мы хотели 119-секундное блок --- разделенный текст, то мы могли бы работать:

awk '/^---/ {mark++; next} mark == 2 {print}' $FILE_PATH

, Который дает нам:


#Hello

5
ответ дан 1 December 2019 в 13:22

Это - опция, давая Ваш пример:

sed -n '/^{$/,/^}$/p' file

Вывод:

{
  "date":"2015-09-24",
  "title":"Getting Started with Git",
  "template":"post",
  "thumbnail":"content/thumbnails/test.jpeg",
  "slug":"getting-started-with-git",
  "categories":[ "cat1", "Focus", "Mustang" ],
  "tags":[ "Fiesta", "Focus", "Mustang" ]
}
2
ответ дан 1 December 2019 в 13:22

Другие вопросы по тегам:

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