やりたいこと
markdown
1<!-- a.md --> 2 3- a: aの説明 4 - b: bの説明 5 - c: cの説明
markdown
1<!-- b.md --> 2 3- a 4 - c 5 - d
みたいなMarkdownが2つあったとします。
a.mdにはそれぞれのアイテムの説明がついています。
b.mdには説明はなく、bが削除され、dが追加されています。
これらから、
markdown
1<!-- output --> 2 3- a: aの説明 4 - c: cの説明 5 - d
というMarkdownを作りたいと思っています。
つまり、b.mdの階層構造をベースに、共通するアイテムの説明をa.mdから引っ張って来たいです。
bがb.mdにないからと言って追加したりせず、dの説明がa.mdにないからといって削除したりしない。
(これをマージというのかは微妙ですが・・・)
試したこと
とりあえずgrep -o -f b.md a.md | sed -E 's/^/(/;s/$/)(.*)/'
で、
(- a)(.*) ( - c)(.*)
と、a.mdとb.mdの共通するアイテムを見つけ、そこから説明をキャプチャできそうなパターンを作ることはできます。このパターンでa.mdにマッチングをかければ1番目のグループに対象の階層構造、2番目のグループに説明をキャプチャできるはず。その結果を使ってb.mdの末尾を2番目のグループで置換できれば望みのデータが得られそうなんですが・・・
**「a.mdにマッチングをかける」と「その結果を使ってb.mdを置換する」**を上手く接続できません。for等を使って1つ1つ変数に入れてやれば自分でもできそうな気はしますが、いまいちshellっぽくない感じがします。
xargs
とか使うのかなと思うのですが・・・
shellっぽくいい感じにできませんか・・・?
環境としてはMacOS Catalinaのzshですが、あまり特殊なコマンドは使わないで汎用的なものにしていただけると嬉しいです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/26 00:59
2020/07/26 01:21
2020/07/26 02:16