Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2043219
  • 博文数量: 470
  • 博客积分: 10206
  • 博客等级: 上将
  • 技术积分: 5620
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 12:50
文章分类

全部博文(470)

文章存档

2012年(1)

2011年(18)

2010年(47)

2009年(404)

分类:

2009-05-14 17:24:13

  帅哥
圣骑士



CU编号: 697092
注册:2008-4-25
最后登录: 2009-05-14
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 15:30 
示例文件如下
asdf llll  dddd  iiii
aaa  bbbb  cccc dddd
asb
         ccc    fff    ffff
asdfj   asdf  asdf   asdf

如果某行的第一个字符为空,就把这一行补到上一行,中间用空格或TAB键隔开,一句正则怎么实现?



您对本贴的看法:

__________________________________

...我本无意与众不同
                   怎奈何品位出众...


| |
(狼烟)
风云使者
披着狼皮的羊



CU编号: 547805
注册:2007-4-5
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 15:41 


CODE:
awk -v RS="###" '{gsub("\n[ \t]+","\t");print}' URFILE




您对本贴的看法:
| |
  帅哥
精灵王




CU编号: 690903
注册:2008-4-13
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-5-14 15:43 
回复 #1 a251235308 的帖子

grep -EB1 '^ +' urfile | sed -n 'N;s/\n/\t/p'

[ 本帖最后由 greendays 于 2009-5-14 15:45 编辑 ]



您对本贴的看法:
| |
(狼烟)
风云使者
披着狼皮的羊



CU编号: 547805
注册:2007-4-5
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 15:44 


CODE:
xargs -n 4 < URFILE




您对本贴的看法:
| |
  帅哥
圣骑士



CU编号: 697092
注册:2008-4-25
最后登录: 2009-05-14
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 15:56 
回复 #2 kwokcn 的帖子

非常感谢。。
能解释一下么?



您对本贴的看法:

__________________________________

...我本无意与众不同
                   怎奈何品位出众...


| |
  帅哥
精灵王




CU编号: 690903
注册:2008-4-13
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-5-14 16:14 
回复 #5 a251235308 的帖子

awk -v RS="###" '{gsub("\n[ \t]+","\t");print}' URFILE
好代码!!
ps: -v  开始定义变量RS="###" ,这个目的是把全文当作一条记录。
gsub("\n[ \t]+","\t")  全局替换函数,把 \n加一个或多个空格或者是\n加一个或多个\t 替换成\t
print 处理之后打印



您对本贴的看法:
| |
  帅哥
圣骑士



CU编号: 697092
注册:2008-4-25
最后登录: 2009-05-14
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 16:29 


QUOTE:
原帖由 greendays 于 2009-5-14 16:14 发表
awk -v RS="###" '{gsub("\n[ \t]+","\t");print}' URFILE
好代码!!
ps: -v  开始定义变量RS="###" ,这个目的是把全文当作一条记录。
gsub("\n[ \t]+","\t")  全局替换函数,把 \n加一个或多个空格或者是 ...

感谢解释。。。



您对本贴的看法:

__________________________________

...我本无意与众不同
                   怎奈何品位出众...


| |
  帅哥
圣骑士



CU编号: 464023
注册:2006-9-10
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 16:29 


QUOTE:
原帖由 kwokcn 于 2009-5-14 15:44 发表

xargs -n 4 < URFILE

这个行不通吧,这个是以4列输出文件,如果某行的第一个字符为空,后边的列数多于3就有问题了
如下:

asdf llll  dddd  iiii
aaa  bbbb  cccc dddd
asb
         ccc    fff    ffff ggg
asdfj   asdf  asdf   asdf



您对本贴的看法:
| |
(狼烟)
风云使者
披着狼皮的羊



CU编号: 547805
注册:2007-4-5
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 16:38 


QUOTE:
原帖由 steel_lei 于 2009-5-14 16:29 发表



这个行不通吧,这个是以4列输出文件,如果某行的第一个字符为空,后边的列数多于3就有问题了
如下:

asdf llll  dddd  iiii
aaa  bbbb  cccc dddd
asb
         ccc    fff    ffff ggg
asdfj    ...

所有的处理都是根据楼主的例子给的,如果文件本来就简单,那何必用麻烦的方法呢?:)



您对本贴的看法:
| |

风云使者




CU编号: 692772
注册:2008-4-16
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 16:45 
sed -r -e '$!N;s/(.*)\n\s+(.*)/\1 \2/;P;D'



您对本贴的看法:

__________________________________

GNU sed 版本 4.1.5   
GNU awk 3.1.5
grep 2.5.1
http:://justlooks.8800.org
三个月内一定要找到工作.......
b20c68726c6421686f20776f6848656c6c89e16301b004cd80b00131dbcd80
| |
  帅哥
圣骑士



CU编号: 697092
注册:2008-4-25
最后登录: 2009-05-14
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 16:50 
回复 #4 kwokcn 的帖子

这个很精简,但是没有达到我实际中的要求,还是很感谢大家的热心帮忙啊

示例只是我根据实际情况简化的模型。。

还有3楼的兄弟,跟我的情况有点出入
还是非常感谢



您对本贴的看法:

__________________________________

...我本无意与众不同
                   怎奈何品位出众...


| |
  帅哥
圣骑士



CU编号: 697092
注册:2008-4-25
最后登录: 2009-05-14
帖子:
精华:0







状态:...离线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 16:53 
回复 #10 justlooks 的帖子

感谢10楼的朋友,
能得到我想要的 ,谢谢,可以解释一下不?



您对本贴的看法:

__________________________________

...我本无意与众不同
                   怎奈何品位出众...


| |

风云使者




CU编号: 692772
注册:2008-4-16
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]     顶部
发表于 2009-5-14 17:01 
回复 #12 a251235308 的帖子

读入 2行,看是否第2行满足以 空白开头,如果是,并成1行,输出第1行,删除第1行,开始新循环



您对本贴的看法:

__________________________________

GNU sed 版本 4.1.5   
GNU awk 3.1.5
grep 2.5.1
http:://justlooks.8800.org
三个月内一定要找到工作.......
b20c68726c6421686f20776f6848656c6c89e16301b004cd80b00131dbcd80
| |
  帅哥
精灵王




CU编号: 690903
注册:2008-4-13
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-5-14 17:09 
回复 #1 a251235308 的帖子

sed -r '$!N;s/(.*)\n[ \t]+(.*)/\1 \2/;P;D'  urfile



您对本贴的看法:
| |
  帅哥
精灵王




CU编号: 690903
注册:2008-4-13
最后登录: 2009-05-14
帖子:
精华:0







状态:...在线...

[] [] [博客]


[]       顶部
发表于 2009-5-14 17:11 
回复 #13 justlooks 的帖子

sed -r -e '$!N;s/(.*)\n\s+(.*)/\1 \2/;P;D'

这里的\s 怎么理解?



您对本贴的看法:
阅读(689) | 评论(0) | 转发(0) |
0

上一篇:sort -k1.2,1n

下一篇:问个关于sed命令

给主人留下些什么吧!~~