尋找遵循某種模式並以字元開頭的所有行

尋找遵循某種模式並以字元開頭的所有行

所以我有很多 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

如果您只想擁有 和 之間的項目categorieslayout您可以簡單地向條件添加第二個模式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 (/^-/) }'

相關內容