+ -
当前位置:首页 → 问答吧 → grep下正则表达式问题,点的匹配,求解答

grep下正则表达式问题,点的匹配,求解答

时间:2011-06-27

来源:互联网

比如ls|grep tmp.*  和ls|grep tmp..* 能匹配的有什么差别,
感觉后边的能匹配上的前面的都能匹配啊,但是实际操作结果是比如tmp.1234或者plugtmp-1 都只是后边的能匹配出来,前边的匹配不出来。为什么?

作者: wsysx   发布时间: 2011-06-27

按道理是前面的能把两个都匹配出来,而后面的只能匹配tmp.1234

作者: jack1007   发布时间: 2011-06-27

按道理是前面的能把两个都匹配出来,而后面的只能匹配tmp.1234

作者: jack1007   发布时间: 2011-06-27

回复 wsysx


    ls|grep tmp.*  和ls|grep tmp..*

tmp.* .*可以0或多个
  tmp..* 一个或多个

作者: wtuter   发布时间: 2011-06-27

tmp.1234 用 ls|grep tmp.* 表达式是可以匹配到的, 它匹配以tmp.开头的所有内容
ls|grep tmp..*匹配包含tmp 三个字符 的所有内容

作者: zhnghaijin   发布时间: 2011-06-27

[root@perass tools]# ls -lt | grep -E tmp\.
-rw-r--r-- 1 root root    0 Jun 26 11:23 tmp11
-rw-r--r-- 1 root root    0 Jun 26 11:22 tmp..
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.1111
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.1
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.111
-rw-r--r-- 1 root root    1 Jun 25 11:27 tmp.log

不准的

作者: 267020090   发布时间: 2011-06-27

[root@perass tools]# ls -lt | awk '{if ($9~/tmp.*/) print $0}'
-rw-r--r-- 1 root root    0 Jun 26 11:23 tmp11
-rw-r--r-- 1 root root    0 Jun 26 11:22 tmp
-rw-r--r-- 1 root root    0 Jun 26 11:22 tmp..
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.1111
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.1
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.111
-rw-r--r-- 1 root root    1 Jun 25 11:27 tmp.log
[root@perass tools]# ls -lt | awk '{if ($9~/tmp..*/) print $0}'
-rw-r--r-- 1 root root    0 Jun 26 11:23 tmp11
-rw-r--r-- 1 root root    0 Jun 26 11:22 tmp..
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.1111
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.1
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.111
-rw-r--r-- 1 root root    1 Jun 25 11:27 tmp.log

tmp.* 表示tmp开头的所有字符窜
tmp..* 表示tmp后跟1个或者多个字符

作者: 267020090   发布时间: 2011-06-27

本帖最后由 lionfun 于 2011-06-27 17:34 编辑

回复 wsysx


    “.”在这里被当做RE元字符来用了,匹配一个非换行符的字符,如果要当做内容的话需要(\)来转义,注意为了避免shell的元字符对正则表达式的影响,请用单引号('')括起来。

作者: lionfun   发布时间: 2011-06-27

果真 得加上""
[root@perass tools]# ls -lt | grep -E tmp".*"
-rw-r--r-- 1 root root    0 Jun 26 11:23 tmp11
-rw-r--r-- 1 root root    0 Jun 26 11:22 tmp
-rw-r--r-- 1 root root    0 Jun 26 11:22 tmp..
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.1111
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.1
-rw-r--r-- 1 root root    0 Jun 26 11:20 tmp.111
-rw-r--r-- 1 root root    1 Jun 25 11:27 tmp.log

作者: 267020090   发布时间: 2011-06-27

我的想法也是被当作通配符来用,而不是点号,但结果跟预期的不同,点是怎么解释的?

作者: wsysx   发布时间: 2011-06-27