免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: cjaizss

[游戏娱乐] 写一个sed [复制链接]

论坛徽章:
0
发表于 2013-03-15 11:12 |显示全部楼层
看到sed,我只能说自己太水了

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2013-03-15 15:42 |显示全部楼层
yestreenstars 发表于 2013-03-14 20:38
比较大小和找出位置貌似不是sed的专长哦~可以用awk么?如果要用sed的话,可以借助shell么?

正是因为不擅长,我才归为“游戏娱乐”啊
呵呵

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2013-03-15 15:45 |显示全部楼层
yestreenstars 发表于 2013-03-14 20:38
比较大小和找出位置貌似不是sed的专长哦~可以用awk么?如果要用sed的话,可以借助shell么?

纯的sed
里面不可以用比如e这样的命令

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2013-03-15 15:48 |显示全部楼层
呵呵,那像00123xdsd0176ddsdw0201eew得到的结果是0201 19还是201 20呢?

论坛徽章:
92
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2015-02-28 17:45:34CU大牛徽章
日期:2019-10-10 10:55:38ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:28CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
发表于 2013-03-15 16:08 |显示全部楼层
本帖最后由 seesea2517 于 2013-03-15 16:40 编辑

折腾了一下,还没研究怎么把位置弄上去,要是折腾不出来就研究研究hbmhalley大侠的方法是怎样的。

  1. s/[^0-9]+/\n/g
  2. s/^|$/\n/g

  3. # Remove heading zeros
  4. s/\n0*/\n/g

  5. # Remove the same numbers except first one
  6. :Uniq
  7.   s/\n([^\n]+)(.*)\n\1\n/\n\1\2\n/
  8.   t Uniq

  9. s/\n+$//

  10. # JudgeNums
  11. s/\n([^ \n]*)/\n\1 \1 \1/g
  12. # s/\n([^ \n]*)/\n0 \1 \1/g
  13. # y/0123456789/1234567890/

  14. :Add#
  15.   s/\n(#*)[0-9]/\n\1#/g
  16.   t Add#

  17. :Rm#
  18.   s/\n#/\n/g
  19.   /#/s/\n[^#]*\n/\n/g
  20.   /#/bRm#

  21. # Rm head spaces
  22. s/\n */\n/g

  23. :SubHead
  24.   s/\n1/\n0/g
  25.   s/\n2/\n1/g
  26.   s/\n3/\n2/g
  27.   s/\n4/\n3/g
  28.   s/\n5/\n4/g
  29.   s/\n6/\n5/g
  30.   s/\n7/\n6/g
  31.   s/\n8/\n7/g
  32.   s/\n9/\n8/g

  33.   # Delete 0
  34.   h
  35.   s/\n0[^\n]*//g
  36.   /^$/{
  37.     g
  38.     s/\n0/\n/g
  39.   }
  40.   /^\n[^\n]*$/!b SubHead

  41. :Last
  42. s/\n[^ ]* //
复制代码

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2013-03-15 16:12 |显示全部楼层
现在好忙啊,我有空也折腾折腾~

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2013-03-15 16:20 |显示全部楼层
呵呵,sed 两个数字(注意是数字,不是数)比较大小其实很容易
有个技巧
在尾部加上0123456789
然后
([0-9])XXXXX([0-9])xxxxxx\1[0-9]*\2[0-9]*$
([0-9])XXXXX([0-9])xxxxxx\2[0-9]*\1[0-9]*$
即可
呵呵
hbmhalley 思路OK,但有BUG

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2013-03-15 16:21 |显示全部楼层
yestreenstars 发表于 2013-03-15 15:48
呵呵,那像00123xdsd0176ddsdw0201eew得到的结果是0201 19还是201 20呢?

0201 19

0021xxx21
你想输出哪个都可以

论坛徽章:
59
19周年集字徽章-年
日期:2019-11-20 14:16:4715-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
发表于 2013-03-15 17:01 |显示全部楼层
一头雾水

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2013-03-20 12:42 |显示全部楼层

  1. #!/usr/bin/sed -rnf
  2. /[0-9]/!d
  3. s/[^0-9]/ /g
  4. s/$/ 0123456789/
  5. tloop
  6. :loop
  7. s/^( *)([0-9]+)( +)([0-9]+)( .*0123456789)$/\1b\2e\3b\4e\5/
  8. tmain

  9. #if only one number stayed,then output
  10. h
  11. s/[0-9].*/ /
  12. s/./1/g
  13. :cnt
  14. s/(^|;)1111111111/1;/g
  15. tcnt
  16. s/111111111/9/g
  17. s/11111111/8/g
  18. s/1111111/7/g
  19. s/111111/6/g
  20. s/11111/5/g
  21. s/1111/4/g
  22. s/111/3/g
  23. s/11/2/g
  24. :zero
  25. s/;;/;0;/g
  26. tzero
  27. s/(^$)|;$/0/
  28. s/;//g
  29. G
  30. tend
  31. :end
  32. s/(.*)\n *([0-9]+).*0123456789$/\2 \1/
  33. tend2
  34. d
  35. :end2
  36. p
  37. d

  38. :main
  39. s/b(0+)/\1b/g
  40. h
  41. :a
  42. s/(bf*)[0-9]/\1f/
  43. ta
  44. /(bf*)e.*\1f/ {
  45.         :e
  46.         g
  47.         :b
  48.         s/[0-9]([0-9]*b.*b)/ \1/
  49.         tb
  50.         :B
  51.         s/(b *)[0-9](.*b)/\1 \2/
  52.         tB
  53.         s/[be]//g
  54.         tloop
  55. }
  56. s/(bf*e)(.*)(bf*e)/\3\1/
  57. /(bf*)e.*\1f/ {
  58.         :f
  59.         g
  60.         :c
  61.         s/(e.* )[0-9]([0-9]*b)/\1 \2/
  62.         tc
  63.         :C
  64.         s/(b *)[0-9]([^b]+)$/\1 \2/
  65.         tC
  66.         s/[be]//g
  67.         tloop
  68. }
  69. g
  70. :d
  71. /b(.).*b\1/! {
  72.         /b(.).*b(.).*\1[0-9]*\2[0-9]*$/be
  73.         bf
  74. }

  75. s/b([0-9])(.*)b([0-9])/\1b\2\3b/
  76. td
  77. be
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP