LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1207|回复: 8

grep *.sh 为什么找不出以.sh结尾的文件

[复制链接]
发表于 2007-6-9 16:13:16 | 显示全部楼层 |阅读模式
grep *.sh 为什么找不出以.sh结尾的文件

    grep  .*.sh就可以.为什么呢,最前面那个.起直么作用????
发表于 2007-6-9 19:06:47 | 显示全部楼层
不说了,你需要找本基础书看,并且搞清楚什么是glob和regex。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-9 20:07:51 | 显示全部楼层
我现在就在看基础书,我问的也就是基础问题好吗?我问的问题和你说的那两个什么东西有关系吗?
你说的那两个什么东西我更搞不懂好吗?
回复 支持 反对

使用道具 举报

发表于 2007-6-9 20:40:48 | 显示全部楼层
简单来说,grep是用来搜索文件内容的,find是用来搜索文件名的。
这个描述不准确,不过可以给你一个概念。
回复 支持 反对

使用道具 举报

发表于 2007-6-9 21:39:54 | 显示全部楼层
grep 是根据正则表达式匹配文档内容的。在正则表达式中,*用来匹配它前面的字符,比如a*就
表示匹配0个或者多个以a开头的字符串,它可以匹配bcd,abcd,aaacd等诸如此类的字符串。在你给的表达式*.sh中,*的前面没有任何字符,因而它也不知道该匹配何种字符串。而在.*.sh中,因为.表示任何一个字符,因此它可以匹配任何以sh结尾的字符串。我是这么理解的,近供参考。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-9 22:03:07 | 显示全部楼层
明白,谢谢!!!!!!!
回复 支持 反对

使用道具 举报

发表于 2007-6-9 22:19:06 | 显示全部楼层
顺便说一句,grep的正则表达式最好用引号引用起来。
回复 支持 反对

使用道具 举报

发表于 2007-6-9 22:19:49 | 显示全部楼层
Post by donydh
我现在就在看基础书,我问的也就是基础问题好吗?我问的问题和你说的那两个什么东西有关系吗?
你说的那两个什么东西我更搞不懂好吗?

因为 [color="Blue"]*.sh 是glob。好吧,说明白点就是shell的文件名匹配: [color="Blue"]* 代表任何多个(包括零个)字符; [color="Blue"]? 代表一个字符; [color="Blue"][] 括起来的表示任何一个在其中的字符...如果你用过Windows的搜索文件功能,星号和问号的作用我想你该相当清楚。

regex代表“regular expression”——正则表达式。这个工具作文本处理要比glob复杂得多,而且对它的解释都是程序做出的,而不是shell。

我不知道您在看什么基础书,不过如果哪本基础书是在教您用 grep(1) 而不是 ls(1) 来列出文件列表的话...真的难以想象不是么?

最后要指出的是不要被误导,即便你的例子用第二种方法可以顺利得到结果,这只是侥幸,但如果你尝试新建一个譬如叫 [color="Blue"].my.sh 的文件时,是否依然想得到您要的结果呢?把 [color="Blue"].*.sh 放进引号里,因为该对regex的解析是grep的而不是shell的工作。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-6-10 00:50:54 | 显示全部楼层
现在基本懂了,因为我还没看到正规表达示和匹配,还在学命令中,脑子里全是命令,符号,特殊符号,
快分不清了.


谢谢解答!!!!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表