所以我有很多 Jekyll 帖子,_posts
標題包含元資料 YAML,包括categories
,如下所示:
---
excerpt: "I am an excerpt"
categories:
- tips
- programming
- howto
- another-tag
layout: blog
title: I am a Page Title
created: 1267026549
permalink: blog/27-05-2017/clean-url-goes-here
---
所以我知道如何 grep 查找該categories
行並n
在 ( -An
) 之後顯示行...但是有沒有辦法讓它顯示以下所有以-
as 開頭的行,顯然,每個帖子都有不同的編號。也許所有線路直到layout
?
答案1
推薦的文字處理工具是awk
.
嘗試這個:
awk '/categories/,/layout/ { if (!/layout/) print }' your_file
此命令列印從categories
直到的所有內容layout
,而無需此行本身。
輸出:
categories:
- tips
- programming
- howto
- another-tag
如果您只想擁有 和 之間的項目categories
,layout
您可以簡單地向條件添加第二個模式if
,如下所示:
awk '/categories/,/layout/ { if (!/layout/ && !/categories/) print }' your_file
然後你的輸出將如下所示:
- tips
- programming
- howto
- another-tag
答案2
如果可以使用pcregrep
(Perl 相容的正規表示式):
pcregrep -M 'categories.*(\n-.*)*' file
或使用前瞻斷言:
pcregrep -M 'categories(.|\n)*(?=layout)' file
答案3
sed -e '/^categories:/,/^[^-]/!d;//d' yourfile
答案4
這是使用 awk 完成此操作的一種方法。當找到標題行時,請列印它,並繼續獲取下一行並列印它,只要下一行以-
.
awk '$0=="categories:" { do { print; getline } while (/^-/) }'