Chinaunix首页 | 论坛 | 博客
  • 博客访问: 107821
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 157
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-09 12:11
文章分类

全部博文(9)

文章存档

2015年(2)

2014年(7)

我的朋友

分类: LINUX

2015-02-07 11:58:55

来CU有段日子了,闲的时候都会逛逛shell板块,尤其是文本处理,看到里面几位版主和其他sed和awk的大拿们轻轻几个代码就解决了复杂的文本处理的时候真心膜拜,自己也跟着大神们练练手,久而久之将知识掌握彻底变成自己的

如题
如何将字符串 2015/02/03/21:48:50 第一个'/'变成空格
通常用sed处理首先会想到下面这种办法,但这是借助了sed特殊的引用方法,并非完全由正则表达式匹配到指定目标

点击(此处)折叠或打开

  1. [root@oracle ~]# echo 2015/02/03/21:48:50|sed 's/\// /1' -r
  2. 2015 02/03/21:48:50

下面是完全使用正则表达式匹配的结果

点击(此处)折叠或打开

  1. [root@oracle ~]# echo 2015/02/03/21:48:50|sed 's/([^/]*)\/(.*)/\1 \2/' -r
  2. 2015 02/03/21:48:50
当然如果此题就是要替换第一个'/',使用第一种方法是最简便的,但第二种匹配的方法我们也要了解,因为完全由正则表达式完成,正则表达式的适用范围更广

再看如何将字符串 2015/02/03/21:48:50 最后一个'/'变成空格
如果采用下面这种办法,精确匹配到了第三个'/'但扩展性大打折扣如果文本中有多个类似的时间需要做修改而时间格式分好几种时,此时就不确定最后一个'/'是否为第三个

点击(此处)折叠或打开

  1. [root@oracle ~]# echo 2015/02/03/21:48:50|sed 's/\// /3' -r
  2. 2015/02/03 21:48:50

这时我们可以采用正则匹配的办法

点击(此处)折叠或打开

  1. [root@oracle ~]# echo 2015/02/03/21:48:50|sed 's/(.*)\/(.*)/\1 \2/' -r
  2. 2015/02/03 21:48:50
第一个(.*)自动贪婪匹配到最后一个'/'前的所有字符
阅读(9563) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~