+ -
当前位置:首页 → 问答吧 → sed的问题,大家帮忙解决一下

sed的问题,大家帮忙解决一下

时间:2011-02-12

来源:互联网

在linux下,有这么个命令
echo 2011-01-25 2011-02-29  | sed "s#\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})#\*\1\*\ #g"
输出结果如下
*2011-01-25*  *2011-01-29*


问:上面中的sed的"s#\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\})#\*\1\*\ #g"
                     1.      s  是什么意思,
              2.      那为什么又要加#  
                     3.      而且  sed 为什么匹配以及替换命令要用 双引号 "来包起来,为什么不是单引号
              4.      为什么最后g之前有个#
                     5.      为什么g之前的#号之前还有个空格
              6.      为什么能够对空格或者TAB间隔分隔的字符串能够都进行匹配处理
就这几个问题,大家帮忙解决一下,详细点.^-^.谢谢哦:D

作者: longxibendi   发布时间: 2011-02-12

回复 longxibendi


    看看这个,是不是可以解决你的问题
http://man.lupaworld.com/content/manage/ringkee/sed.htm

作者: yinyuemi   发布时间: 2011-02-12

恩,有些匹配我是知道的,现在想知道,为什么用#和那么多反斜杠,以及那个空格是怎么回事,难道是分隔符?

作者: longxibendi   发布时间: 2011-02-12

本帖最后由 yinyuemi 于 2011-02-12 16:08 编辑

"#" 是分隔符,默认情况下是"/"
开始的"\"是正则匹配的一部分,即属于"\( \)"
\{n\}是匹配个数
\*是将"*"作为普通字符处理
\[space] 当然是匹配空格的,呵呵

补充下,你的代码里少了一个"\": sed "s#\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)#\*\1\*\ #g"

作者: yinyuemi   发布时间: 2011-02-12

回复 longxibendi


如果不想使用那么多反斜杠,可以给sed加上-r选项。

作者: Shell_HAT   发布时间: 2011-02-12

热门下载

更多