在每个多行范围之前插入带有SED的行



我如何在每个多行范围块之前插入一行并缩进块在windows上的gnu sed ?这些文件包含许多以' ' '开头和结尾的不同长度的代码块。许多类似问题的答案使用单线模式,不使用范围。有两个类似的问题:在文本范围下面插入一行,并在文本块后面添加sed和sed:

以下代码按需要缩进所有代码块:

sed '/```/,/```$/ s/(.*)/ 1/' test.md

我不明白如何在每个代码块之前插入===行,但我理解在插入行后需要与{}分组来处理块。上面的问题似乎更复杂,需要一个缓冲区,但这个文件应该能够在没有缓冲区的情况下被顺序处理。

我希望像这样的尝试应该与组前的换行符细节一起工作:

sed '/```/,/```$/ {s/(.*)/ 1/}' test.md

test.md

a
b
```
c
d
e
```
f
g

需要

a
b
===
```
c
d
e
```
f
g

使用GNU sed:

$ cat file
1
```
2
```
3
```
4
```
5
$ sed '/^```$/{ s/^/===n    /; :a; n; s/^/    /; /^    ```$/b; ba; }' file
1
===
```
2
```
3
===
```
4
```
5

(cool sedsed可以详细说明其工作原理)

用awk

:

$ awk '/^```/ { if (!f) { print "===" } f++ } f { print "    " $0 } f==2 { f=0; next } !f' file
1
===
```
2
```
3
===
```
4
```
5

最新更新