上部にはYAMLメタデータブロックを含むMarkdownファイルがいくつかあります。
---
title: title of work
author: author name
author-sort: name, author
published: N
date: XXXX-XX-XX
pub-number: XXXXX
embedded-title: false
---
**title**
a piece of indertimate
length that could be a few lines of many hundreds
---[author name](author link)
---found in [source](source link)
私はメタデータの塊を抽出する方法を見つけようとしています(それでそれを供給することができますが、後でyamllint
他のものを供給することもできます)。 awkが適切なツールのようですが、awkを理解していないので、私が思いついた最高のものは次のとおりです。
awk '/^---$/ {printline = 1; print; next} /^---$/ {printline = 0} printline'
これはファイル全体を示しています。---
ファイルを自分の行に制限する試みは機能しません(ここに他の行がない可能性があります)!
ベストアンサー1
sed
より良いツールを選択することができます。常にファイルの先頭にあるので、sed
この行から2行目のみを---
印刷するように指定してから、その行を削除できます。
例えば
sed -n '2,/^---$/ {/^---$/d; p}'
これは次のように達成されます。
-n: don't print by default
2,/^---$/ { ... }: limit the next part to the lines between line 2 and the first line matching ---
その後、そのブロック内で
/^----$/d : delete the --- line
p : print what remains.
したがって、テストファイルの出力は次のようになります。
title: title of work
author: author name
author-sort: name, author
published: N
date: XXXX-XX-XX
pub-number: XXXXX
embedded-title: false
これにはawk
トレース状態が必要です。例えば
awk '
/^---$/ && printline==0 {printline = 1;next}
/^---$/ {printline = 2; next}
{ if (printline==1) { print } }
'
---
ファイルの残りの部分に行がある場合は、この状態が必要です。