したがって、次のように、_posts
タイトルにメタデータYAMLを含むJekyll投稿がたくさんあります。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
---
categories
だから、行を探してn
()の後に行を表示するためにgrepする方法を知っています...しかし、明らかに各投稿の番号が異なるので、で始まる次の行をすべて-An
表示させる方法はありますか?-
おそらくすべての行はlayout
?
答え1
推奨されるテキスト処理ツールはですawk
。
この試み:
awk '/categories/,/layout/ { if (!/layout/) print }' your_file
このコマンドは、行自体がなくなるcategories
まですべてを印刷します。layout
出力:
categories:
- tips
- programming
- howto
- another-tag
categories
との間にのみ項目が必要な場合は、次のように条件layout
に2番目のパターンを追加できます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を使用してこれを行う1つの方法は次のとおりです。ヘッダー行が見つかったら、印刷し、次の行がで始まる限り、次の行をインポートして印刷します-
。
awk '$0=="categories:" { do { print; getline } while (/^-/) }'