shell 命令*的使用问题

*号的解释是:配前面的子表达式零次或多次。例如d*,可以匹配d,dd,……。
为什么我在linux下输入ls d*后出现:dot.txt dot1.txt 。它应该匹配零次或者多次的重复,应该是dd.txt之类的。

ls只支持通配符,不支持正则表达式
grep、sed和awk命令才支持正则。

在通配符中,*表示任意数目的任意字符;
在正则表达式中,*表示重复前面的字符任意多次(包括0次)。
是不一样的含义。

你要用正则的话,可以用管道将ls的结果送给grep命令来处理,即用如下形式来实现:
ls|grep ^dd*
^表示匹配字符串开头(如果你要求文件名以字母d开头的话就必须加这个)
因为*也匹配前面的d出现0次的情况(即整个文件名中d一次都不出现),因此如果你要求必须d至少出现一次,这里就需要写两个d。

下面这个也行:
ls|egrep ^d+
+表示匹配前面的字符1次或多次
但grep不支持+,只能用egrep
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-11
楼主要分清通配符中的*和正则表达式中的*,他们是不一样的。你所说的意思是正则表达式中*的用法。而ls d*是通配符的使用方法,它代表任何字符出现0到多次。
第2个回答  2013-01-07
*匹配任意多数量的任意字符,而不仅仅是字符d
如果想匹配1个字符,用.
.和*都是通配符,可以匹配任意字符追问

我说的是正则表达式,.是单个字符。我看到很多脚本里面都是用.*来匹配任意个字符。我想不通为什么?

追答

UNIX是这样规定的,你只要记住*匹配任意数量字符就行了,下回你自己发明一个其它操作系统,你愿意用什么字符来通配都行。不过如果你的OS想要被别人接受,估计还是*

第3个回答  2013-01-07
用来匹配任意个数(包含0个)的字符.
第4个回答  2013-01-07
你说的*的解释是正则表达式里面的*
shell执行glob匹配和正则表达式概念不通,glob的匹配规则具体可以网上搜一下 或者参考man bash内容

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网