免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 18054 | 回复: 11
打印 上一主题 下一主题

[文本处理] sed命令替换时如何使用正则表达式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-15 20:04 |只看该作者 |倒序浏览
sed替换的格式:sed 's/被替换的字符串/新字符串/'
想知道“被替换的字符串”这块怎么使用正则表达式

另外还有一个需求,将1234567变成1,234,567     我使用UE将 (...)(...$) 替换为 ,\1,\2 可以实现该需求,但用sed怎么实现

论坛徽章:
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
2 [报告]
发表于 2012-11-15 20:19 |只看该作者
本帖最后由 yestreenstars 于 2012-11-15 21:04 编辑
  1. echo "1234567" | sed -r 's(.)(.{3})(.*)/\1,\2,\3/'
复制代码

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
3 [报告]
发表于 2012-11-15 21:03 |只看该作者
本帖最后由 代号:军刀 于 2012-11-15 21:08 编辑

回复 2# yestreenstars


    你的语句有点问题吧,少了符号/,顺便请教下这个“/”在sed的术语怎么表达的,
    正确的应该是

    echo "1234567" | sed -r 's/(.)(.{3})(.*)/\1,\2,\3/'

论坛徽章:
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
4 [报告]
发表于 2012-11-15 21:04 |只看该作者
回复 3# 代号:军刀


    是少了,我经常丢三落四的,多谢提醒,已更正。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
5 [报告]
发表于 2012-11-15 23:17 |只看该作者
回复 2# yestreenstars

这样是不完全正确的, 虽然可以解决楼主的问题.

印象中这是一个典型的 正则问题, 就是给一串数字加 千位分隔符. 具体的答案我已经忘了, 但我记得好象用到了反向和递归. 这样才能不管多少位长的数字都能正确的分隔.
   

论坛徽章:
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
6 [报告]
发表于 2012-11-15 23:31 |只看该作者
回复 5# q1208c


    他没说,所以我没多想,听你这么一说,的确是划分千位的。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
7 [报告]
发表于 2012-11-15 23:36 |只看该作者
回复 6# yestreenstars


   

论坛徽章:
0
8 [报告]
发表于 2012-11-15 23:52 |只看该作者
可以在vi中这么干:
1234567 后补一位空格
录入宏
:map  <F1>  3hi,<Esc><F1>
光标移到1234567后空格上时执行宏F1
然后删掉行首的,即是想要的内容
可能不符合楼主的要求,也不算是一个完善的解决办法。

论坛徽章:
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
9 [报告]
发表于 2012-11-16 00:29 |只看该作者
本帖最后由 yestreenstars 于 2012-11-16 09:04 编辑

回复 7# q1208c


    看一下我这个如何
  1. echo "1234567" | awk 'BEGIN{FS=OFS=""}{for(i=NF;i>=1;i--){a++;b=b?(a-1)%3?b$i:b","$i:b$i};print b}' | rev
复制代码

论坛徽章:
0
10 [报告]
发表于 2012-11-16 07:39 |只看该作者
本帖最后由 ylbaby2003 于 2012-11-16 07:44 编辑

这个答案我也有了,用rev反转两次,多谢楼上的提示。
  1. echo "123456798764321" |rev |sed -e 's/[0-9]\{3\}/&,/g'|sed -e 's/,$//'|rev
复制代码
结果是:
123,456,798,764,321
其实只要能反转,就不是什么难问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP