Ниже мой входной файл:
---
{
"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
Вот одно решение:
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
Это - опция, давая Ваш пример:
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" ]
}