そのため、次のような_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
---
行を grep して( ) の後の行categories
を表示する方法はわかっていますが、各投稿には異なる番号が付いているので、 で始まる後続の行をすべて表示する方法はありますか。までのすべての行を表示できますか?n
-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 でこれを行う方法は次のとおりです。ヘッダー行を見つけたら、それを印刷し、次の行が . で始まる限り、次の行を取得して印刷し続けます-
。
awk '$0=="categories:" { do { print; getline } while (/^-/) }'