使用sed替换文本文件中2个特定行之间的文本

Nik*_*hil 0 regex bash awk text sed

类似的问题已被提出,但它们适用于Powershell.

我有一个Markdown文件,如:

.
.
.
## See also

- [a](./A.md)
- [A Child](./AChild.md)
.
.
.
- [b](./B.md)
.
.
.
## Introduction
.
.
.
Run Code Online (Sandbox Code Playgroud)

我想,以取代所有出现的.md).html)之间 ## See also## Introduction:

.
.
.
## See also

- [a](./A.html)
- [A Child](./AChild.html)
.
.
.
- [b](./B.html)
.
.
.
## Introduction
.
.
.
Run Code Online (Sandbox Code Playgroud)

我在Bash中尝试过这样的

orig="\.md)"; new="\.html)"; sed "s~$orig~$new~" t.md -i
Run Code Online (Sandbox Code Playgroud)

但是,这取代了文件中的任何地方.但我希望更换只发生在## See also和之间 ## Introduction

你能建议改变吗?我使用awk和sed,因为我对它们不太熟悉.我也知道一点Python,是否建议用Python编写这样的脚本(如果它对于sed或awk来说太复杂了)?

kar*_*kfa 6

$ sed '/## See also/,/## Introduction/s/\.md/.html/g' file
Run Code Online (Sandbox Code Playgroud)