查找两个字符串之间的内容并删除换行符
请教一个问题
有一个文本a.txt
内容如下
3.230: [full gc (system)3.230: [cms : ok->3729k(1310720k),0.0657070 secs】75511k->3729k(1939904k),[cms perm : 13040k->13029k(307200k)],0.0657790 secs] [times: user=0.07 sys=0.01,real=0.07 secs]
12.745:[gc 8.675: [parnew: 471936->21331k(629184k),0.035690 secs] [times: user=0.07 sys=0.01,real=0.07 secs]
12.745:[gc 8.675: [parnew: 471936->21331k(629184k),0.035690 secs] [times: user=0.07 sys=0.01,real=0.07 secs]
12.745:[gc 8.675: [parnew: 471936->21331k(629184k),0.035690 secs] [times: user=0.07 sys=0.01,real=0.07 secs]
........
3.230: [full gc (system)3.230: [cms : ok->3729k(1310720k),0.0657070 secs】75511k->3729k(1939904k),[cms perm : 13040k->13029k(307200k)],0.0657790 secs] [times: user=0.07 sys=0.01,real=0.07 secs]
12.745:[gc 8.675: [parnew: 471936->21331k(629184k),0.035690 secs] [times: user=0.07 sys=0.01,real=0.07 secs]
12.745:[gc 8.675: [parnew: 471936->21331k(629184k),0.035690 secs] [times: user=0.07 sys=0.01,real=0.07 secs]
...........
3.230: [full gc (system)3.230: [cms : ok->3729k(1310720k),0.0657070 secs】75511k->3729k(1939904k),[cms perm : 13040k->13029k(307200k)],0.0657790 secs] [times: user=0.07 sys=0.01,real=0.07 secs]
3.230: [full gc (system)3.230: [cms : ok->3729k(1310720k),0.0657070 secs】75511k->3729k(1939904k),[cms perm : 13040k->13029k(307200k)],0.0657790 secs] [times: user=0.07 sys=0.01,real=0.07 secs]
如何能将上面文本按[full gc为关键字搜索 找到这行以后. 把两个[full gc之间的内容的换行符删除.
也就是以[full gc为关键合并行.一行保证只有一个[full gc
多谢了
作者: rishairu 发布时间: 2011-06-15
作者: rishairu 发布时间: 2011-06-15
- awk '/\[full gc/{print ""}{printf $0}' urfile
作者: ly5066113 发布时间: 2011-06-15
作者: rishairu 发布时间: 2011-06-15
- sed -e '/\[full gc/{
- :a
- $!N
- /.*\n.*\[full gc.*/!{
- s/\n//g
- ta
- }
- P
- D
- }' file
作者: liion631818 发布时间: 2011-06-15
原来是这样,怎么我就只想到一个sed呢,复杂了。。
作者: liion631818 发布时间: 2011-06-15
N 前面不加 $! 会有问题的。
作者: ly5066113 发布时间: 2011-06-15
能给兄弟讲解一下么
作者: rishairu 发布时间: 2011-06-15
是哦,full gc出现在最后一行就出问题了。我改下
作者: liion631818 发布时间: 2011-06-15
大概讲下吧,最好你去看看sed & awk这本书
- sed -e '/\[full gc/{
- :a
- $!N #当匹配到full gc的时候就读取下一行放进pattern space,2行之间会以\n分割
- /.*\n.*\[full gc.*/!{
- s/\n//g # 把2个full gc之间的\n都替换为空,\n是有N读取下一行的时候sed自动加入的,作为2行的分隔符
- ta #循环,直到出现第二个full gc
- }
- P # 打印pattern space中的第一行
- D #删除pattern space的第一行
- }' file
作者: liion631818 发布时间: 2011-06-15