免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: dbcat
打印 上一主题 下一主题

文本行横竖转换  关闭 [复制链接]

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
11 [报告]
发表于 2006-01-12 09:22 |只看该作者
改的好读一点儿吧

  1. H            #保存所有行
  2. ${          #最后一行处理,与AWK的END相似
  3. :a
  4. g            #取得保留空间内容
  5. s/\n[^\n]/\n/g       #把第一个不是换行符删除
  6. :b                                      #与下面一句形成循环
  7. /[^\n]/s/\n\n/\n \n/g;tb    #其实是补位用的
  8. x                                       #交换保留/模式空间内容,这时保留空间已经没有每"行"的第一个字符了
  9. s/\n\+\([^\n]\)[^\n]*/\1/gp;ta   #打印出模式空间的所有"行"的第一个字符,再去:a处处理保留空间的内容
  10. }
复制代码

论坛徽章:
0
12 [报告]
发表于 2006-01-12 11:12 |只看该作者
原帖由 waker 于 2006-1-12 09:12 发表
... 当然部分不支持\n的用户不能通过 ...


Yes, many sed versions don't support \n as a replacement.

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
13 [报告]
发表于 2006-01-12 11:41 |只看该作者

回复 11楼 waker 的帖子

空行没有考虑吧?
1234567

drmfslx

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
14 [报告]
发表于 2006-01-12 12:02 |只看该作者
原帖由 faintblue 于 2006-1-12 11:12 发表


Yes, many sed versions don't support \n as a replacement.

这样是否移植性更好?
  1. sed -n 'H;${:a;
  2. g;
  3. s/\(\n\)[^\n]/\1/g;
  4. :b;
  5. /[^\n]/s/\(\n\)\1/\1 \1/g;tb;
  6. x;
  7. s/\n\+\([^\n]\)[^\n]*/\1/gp;ta}'
复制代码

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
15 [报告]
发表于 2006-01-12 12:09 |只看该作者
加了一行就出问题了

  1. cat file
  2. 123456
  3. abc
  4. ABCDE
  5. hijk
  6. lmnopqrstuvw
  7. ^_^
复制代码

结果
  1. 1aAhl^
  2. 2bBim_
  3. 3cCjn^
  4. 4 Dko

  5. 5 E p

  6. 6   q

  7.     r

  8.     s

  9.     t

  10.     u

  11.     v

  12.     w
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
16 [报告]
发表于 2006-01-12 12:26 |只看该作者
空行好解决
最前面加
/^$/s// /

多换行的问题还得考虑

论坛徽章:
0
17 [报告]
发表于 2006-01-12 12:35 |只看该作者
原帖由 r2007 于 2006-1-12 12:02 发表

这样是否移植性更好?

s/\n\+\([^\n]\)[^\n]*/\1/gp;ta}'


+ is bad for 移植性.

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
18 [报告]
发表于 2006-01-12 13:01 |只看该作者
再修订一次吧,虽然不能满足所有sed版本
不过感觉还有修改空间
  1. sed -n '/^$/s// /
  2. H
  3. ${
  4. :a
  5. g
  6. s/\(\n\)[^\n]/\1/g
  7. :b
  8. /[^\n]/s/\(\n\)\1/\1 \1/g
  9. tb
  10. x;
  11. s/\n\n*\([^\n]\)[^\n]*/\1/g
  12. s/\n//g
  13. /[^\n]/{p;ba}
  14. }' file
复制代码

论坛徽章:
0
19 [报告]
发表于 2006-01-12 17:12 |只看该作者
感谢蚂蚁,烈火,FAINTBLUE , WAKER ,R2007 的无私帮助!
问题圆满解决!
向你们致敬!

[ 本帖最后由 dbcat 于 2006-1-12 17:13 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2006-01-12 18:14 |只看该作者
呵呵,我是来学习的,建议美女把帖子改个名字,以后方便查阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP