我想操纵一个文本文件,以便用{{{和}}}包围缩进行的块。
这就是我被困住的地方:
1 /^\ [^\ ]/,/^[^\ ]/{ # match range: all indented plus line after that
2 b fixIndented # branch
3 }
4
5 /^[^\ ]/{p;b} # print all non-indented outside range and exit.
6
7 :fixIndented
8 /^[^\ ]/{ # match last line of range
9 x; # swap Holdbuffer und patternSpace, edit patternSpace
10 i\
11 {{{
12 a\
13 }}}
14 p;
15 x;p;
16 }
17 H; # write each line in range into holdBuffer
我认为第15行应该在保持缓冲区中读取(包含我在第9行中交换的内容)然后打印它,在操作的模式空间(第10-13行)打印之后( 14)。 但这不会发生。相反,它似乎将保持缓冲区中的行合并到模式空间中。像这样:
bla
blubb
foo1
bla2
foo3
sadgfasdf
bar
foo
变为:
bla
blubb
{{{
foo1
bla2
foo3
sadgfasdf
}}}
bar
foo
如果有人花时间指引我走向正确的方向,我将非常感激。谢谢,
答案 0 :(得分:2)
也可以使用sed但是使用awk很简单:
cat file
bla
blubb
foo1
bla2
foo3
sadgfasdf
bar
foo
awk '!s && /^ /{s=1; $0 = " {{{" ORS $0} s && /^[^ ]/{s=0; $0 = " }}}" ORS $0}1' file
bla
blubb
{{{
foo1
bla2
foo3
}}}
sadgfasdf
bar
foo