查找遵循某种模式并以字符开头的所有行

查找遵循某种模式并以字符开头的所有行

所以我有很多 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 (/^-/) }'

相关内容