免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何保留最后的点,而替换其他的点和空格。 [复制链接]

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
11 [报告]
发表于 2014-02-18 09:17 |只看该作者
  1. [seesea@UC ~]$ echo "txt aaa.bb.c.log" | sed -r 's/[ .]/_/g; s/_([^_]*$)/.\1/'
  2. txt_aaa_bb_c.log
复制代码

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
12 [报告]
发表于 2014-02-18 09:52 |只看该作者
回复 9# yestreenstars
个人觉得这个才是楼主想要的。这里有两个问题,
一个是文件名中空格的处理,通过自定义IFS;
另一个才是对得到的文件名进行替换。


   

论坛徽章:
2
水瓶座
日期:2014-02-28 14:20:09辰龙
日期:2014-06-16 13:18:51
13 [报告]
发表于 2014-02-18 09:56 |只看该作者
  1. echo "txt 2014.02.14.log" | sed -r 's#[ .]#_#g;s#^(.*)(_)(.*)$#\1.\3#'
复制代码
先全替换了,然后再把最后那个_换成.

论坛徽章:
2
水瓶座
日期:2014-02-28 14:20:09辰龙
日期:2014-06-16 13:18:51
14 [报告]
发表于 2014-02-18 10:03 |只看该作者
TO 某人:正则表达式写的炫,写得精简、短小不代表就好!能正确运行、容易维护的表达式才是好的表达式!你写一个超牛逼的表达式通常会带给维护它的人无尽的痛苦!

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
15 [报告]
发表于 2014-02-18 10:13 |只看该作者
回复 14# rogantianwz


    这方面维护人员负全责

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-16 06:20:00
16 [报告]
发表于 2014-02-18 10:22 |只看该作者
用sed这样一步就可以了吧?
  1. [root@localhost ~]# echo 'txt 2014.02.14.log' | sed 's/[. ]\([0-9]\)/_\1/g'
  2. txt_2014_02_14.log
复制代码

论坛徽章:
2
水瓶座
日期:2014-02-28 14:20:09辰龙
日期:2014-06-16 13:18:51
17 [报告]
发表于 2014-02-18 16:06 |只看该作者
回复 7# runintostar


    哎呀,哥呀,你太帅了

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-16 06:20:00
18 [报告]
发表于 2014-02-19 10:10 |只看该作者
在perl里找到一中环视的匹配方式。觉得还是很有意思的。
  1. [root@localhost ~]# echo 'txt 2014.02.19.log' | perl -pe 's/[ .](?!\w+$)/_/g'
  2. txt_2014_02_19.log
  3. [root@localhost ~]# echo 'txt a.b.c.log' | perl -pe 's/[ .](?!\w+$)/_/g'
  4. txt_a_b_c.log
  5. [root@localhost ~]# echo 'txt a.b.c.mp4' | perl -pe 's/[ .](?!\w+$)/_/g'
  6. txt_a_b_c.mp4
复制代码

论坛徽章:
2
水瓶座
日期:2014-02-28 14:20:09辰龙
日期:2014-06-16 13:18:51
19 [报告]
发表于 2014-02-19 10:29 |只看该作者
回复 18# nathanielwen


    不知道sed,awk支不支持环视,估计够呛!

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-12-16 06:20:00
20 [报告]
发表于 2014-02-19 10:33 |只看该作者
估计不支持吧,刚好今天看到《精通正则表达式》里面介绍了这个,刚好思路吻合。就贴上来了。用环视的话逻辑上是最好理解的:
除了后缀名相连的点号之外的点号及空格都替换为下划线。
回复 19# rogantianwz


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP