- 论坛徽章:
- 3
|
本帖最后由 cjaizss 于 2011-12-06 20:26 编辑
回复 cjaizss
大侠,有几个地还不是很明白,能否解释下,多谢
linux-0gt0:/tmp/test # cat 2 ...
unbutun 发表于 2011-12-06 19:59 ![]()
大侠,有几个地还不是很明白,能否解释下,多谢
linux-0gt0:/tmp/test # cat 2.sed
#!/bin/sed -nrf
/int[ \t]+test[ \t]*\(/!d ----------此处是找到第一个int test(),找到之后,就把它往保留空间里压,并且进入函数处理流程
h
:a
n
H
/\{/ {
s/[^{}]//g --------- 在这是取{,一直取到不是{为止
H
bb
}
ba
:b
n
H
:c
s/[^{}]//g ----------------------- 这块是把所有的不是花括号的东西略去,以便花括号匹配
tc #clear s
H
x
s/(\n[^\n]*)(\n[^\n]*)\n([^\n]*)$/\2\1\3/ -----------------------
td
:d
s/(\n[^\n]*)\{\}([^\n]*)$/\1\2/ ----------------------- 以上两个与我保留空间中的存储有关,我保留空间里面是这样存的:已检测过并将来要打印出来的代码(然后马上紧跟一个\n)保留空间的最后一行是一堆花括号,用来做匹配的,当这一堆花括号都被消掉的时候,就是匹配到函数的最后一个}的时候,这个时候该打印并结束程序了
td
/\n$/ {------对照上面,最后一行的花括号都被消没了,标志是\n成了保留空间的最后一个字符
s/\n$//p
s/^[ \t]*int[ \t]+test/&_a/p
q
}
x
bb
sed是天书一样的代码,一段时间之后,我自己也看不懂了.
幸亏你没在一周之后问我. |
|