以下の例のようにMarkdownファイルがあります。
---
id: http
title: Title can be anything
sidebar_label: HTTP API
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
export let Bubble = ({ item }) => {
return (
<div>
<div style={{ display: 'flex', fontFamily: 'monospace', borderRadius: '3px', backgroundColor: '#ddd', display: 'inline', padding: '5px'}}>
{item}
</div>
<div className=twentypx/>
</div>
);
}
## This title can be anything too
bla bla
各ファイルには---
との間に異なる内容があります##
。タイトルを取得したいので、---
上記の内容を次のよう##
に変更したいと思います。# Title can be anything
したがって、目的の最終結果は次のようになります。
# Title can be anything
## This title can be anything too
bla bla
他のファイルのタイトルは異なります。 Bashでこれを行うにはどうすればよいですか?
答え1
使用sed
$ sed -E '/title:/{s/[^ ]* (.*)/\1/;h};/^-/,/^}/d;/^$/{x;s/^/# /;G}' input_file
# HTTP API
## General & Auth
bla bla
答え2
Perlを使用する1行のコード:
$ perl -0pe 's/.*^title:\s*([^\n]+\n).*(?=## General)/# $1\n/ms' file
# HTTP API
## General & Auth
bla bla