在每个多行范围之前插入带有 SED 的行
Insert Line with SED Before Each Multiline Range
如何在 windows 上的 gnu sed 中在每个多行范围块之前插入一行并缩进这些块?这些文件包含许多不同长度的代码块,以 ``` 开头和结尾。许多使用单行模式的类似问题的答案不使用范围。有两个类似的问题: and .
此代码按要求缩进了所有代码块:
sed '/```/,/```$/ s/\(.*\)/ /' test.md
我不明白如何在每个代码块之前插入 ===
行,但我知道插入行后需要用 {}
分组来处理代码块。上面的问题看起来更复杂,需要缓冲区,但这个文件应该能够在没有缓冲区的情况下按顺序处理。
我希望像这样的尝试可以在组之前使用换行细节:
sed '/```/,/```$/ {s/\(.*\)/ /}' 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
(很酷的sedsed可以详细展示它是如何工作的。)
使用 awk:
$ awk '/^```/ { if (!f) { print "===" } f++ } f { print " " [=11=] } f==2 { f=0; next } !f' file
1
===
```
2
```
3
===
```
4
```
5
如何在 windows 上的 gnu sed 中在每个多行范围块之前插入一行并缩进这些块?这些文件包含许多不同长度的代码块,以 ``` 开头和结尾。许多使用单行模式的类似问题的答案不使用范围。有两个类似的问题:
此代码按要求缩进了所有代码块:
sed '/```/,/```$/ s/\(.*\)/ /' test.md
我不明白如何在每个代码块之前插入 ===
行,但我知道插入行后需要用 {}
分组来处理代码块。上面的问题看起来更复杂,需要缓冲区,但这个文件应该能够在没有缓冲区的情况下按顺序处理。
我希望像这样的尝试可以在组之前使用换行细节:
sed '/```/,/```$/ {s/\(.*\)/ /}' 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
(很酷的sedsed可以详细展示它是如何工作的。)
使用 awk:
$ awk '/^```/ { if (!f) { print "===" } f++ } f { print " " [=11=] } f==2 { f=0; next } !f' file
1
===
```
2
```
3
===
```
4
```
5