<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=Linux%E9%80%9A%E9%85%8D%E7%AC%A6</id>
		<title>Linux通配符 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=Linux%E9%80%9A%E9%85%8D%E7%AC%A6"/>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Linux%E9%80%9A%E9%85%8D%E7%AC%A6&amp;action=history"/>
		<updated>2026-04-24T09:45:23Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>http://wiki.tomtalk.net/index.php?title=Linux%E9%80%9A%E9%85%8D%E7%AC%A6&amp;diff=2689&amp;oldid=prev</id>
		<title>Tom：/* Linux通配符 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Linux%E9%80%9A%E9%85%8D%E7%AC%A6&amp;diff=2689&amp;oldid=prev"/>
				<updated>2012-09-30T18:53:13Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Linux通配符&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==linux文件名匹配（通配符使用）==&lt;br /&gt;
&lt;br /&gt;
当在使用命令行时，有很多时间都用来查找你所需要的文件，如ls find等。 S h e l l提供了一套完整的字符串模式匹配规则，或者称之为元字符，当s h e l l遇到上述字符时，就会把它们当作特殊字符，而不是文件名中的普通字符，这样用户就可以用它们来匹配相应的文件名，我理解这可以称为通配符。&lt;br /&gt;
&lt;br /&gt;
通配符与正则表达式是有区别的，简单来说：通配符是用来通配的，正则表达式是用来匹配字符串的；在文本过滤工具里，都是用正则表达式，比如像awk，sed，等，是针对文件的内容的。而通配符多用在文件名上，比如查找find，ls，cp，等等。其次，shell对通配符与正则表达式的出了有不同，“ ”内一般为通配符（是shell本身提取处理），‘ ’内一般为正则表达式（shell会将其中的数据传递给其它命令处理）。&lt;br /&gt;
 &lt;br /&gt;
下面就是通常意义上的通配符：&lt;br /&gt;
&lt;br /&gt;
*   匹配文件名中的任何字符串，包括空字符串。&lt;br /&gt;
&lt;br /&gt;
？ 匹配文件名中的任何单个字符。&lt;br /&gt;
&lt;br /&gt;
[...]   匹配[ ]中所包含的任何字符。&lt;br /&gt;
&lt;br /&gt;
[!...]   匹配[ ]中非感叹号！之后的字符。&lt;br /&gt;
&lt;br /&gt;
如：&lt;br /&gt;
* 5＊           5开头的所有字符串&lt;br /&gt;
* ＊5           5结尾的所有字符串&lt;br /&gt;
* ＊5？        以5为倒数第二个字符的字符串&lt;br /&gt;
* [0－9]    所有以数字的字符&lt;br /&gt;
* [1,2]         1或者2&lt;br /&gt;
* [!0-9]        不是数字的字符&lt;br /&gt;
* ls /etc/[!a-n]*.conf 列出/etc/目录中不是以字母a到n开头的，并且以.conf结尾的文件&lt;br /&gt;
* ls /etc/[a-n]*.conf 列出/etc/目录中以字母a到n开头的，并且以.conf结尾的文件&lt;br /&gt;
* ls /bin/[ck]* 列出以 c或k开头的文件名&lt;br /&gt;
 &lt;br /&gt;
如有不妥之处，请指正。&lt;br /&gt;
&lt;br /&gt;
==Linux通配符==&lt;br /&gt;
&lt;br /&gt;
1、基本的通配符有哪些？ &lt;br /&gt;
&lt;br /&gt;
·“？”可替代单个字符。 &lt;br /&gt;
&lt;br /&gt;
·“*”可替代任意字符。 &lt;br /&gt;
&lt;br /&gt;
·方括号“[charset]”可替代charset集中的任何单个字符。 &lt;br /&gt;
&lt;br /&gt;
对最后一条做些解释。[cChH]通配符便可替代c或h字符的大小写形式。通配符集还能描述介于字符对之间的所有字符。如“[a-z]”就可以代替任意小写字母，而[a-zA-Z]则可替代任意字母。注意可替代的字符包括字符包括字符对之间的所有字符。 &lt;br /&gt;
&lt;br /&gt;
与DOS相比，UNIX的通配符机制要比DOS好得多。在DOS中，任何在“*”之后，在“.”之彰的字符均被忽略，所以下面的指令将不能得到你想象的结果。 &lt;br /&gt;
&lt;br /&gt;
del *bak.* &lt;br /&gt;
&lt;br /&gt;
在DOS中，用户只能用此命令删除当前目前下的所有文件，除非系统要求你不这样做。而在UNIX系统中，“*”可替代包括0在内的任意数字的字符，但一行中的其余特征也仍需匹配，因此“bak.*”可匹配newbak.save、oldbak.new甚至bak.temp，但不能和newbak匹配，因为后者不含“.”。这非常巧妙，可大大方便用户，而“*bak”则可匹配以上所有的词条，包括newbak。 &lt;br /&gt;
&lt;br /&gt;
2、能在一条指令中用多个通配符吗？ &lt;br /&gt;
&lt;br /&gt;
可以，如 &lt;br /&gt;
&lt;br /&gt;
rm a*out*tmp? &lt;br /&gt;
&lt;br /&gt;
该命令可以删除一系列临时性的输出文件，如ab.out.temp1、ab.out.temp1等。 &lt;br /&gt;
&lt;br /&gt;
3、如何利用通配符使指令更灵活？ &lt;br /&gt;
&lt;br /&gt;
UNIX可将有一定关的文件看作一集合的一部分,用户可以用该集合去匹配。所以，如果你需要删除file1.temp、file2.temp……file9.temp，只须健入： &lt;br /&gt;
&lt;br /&gt;
rm file[0-9].temp &lt;br /&gt;
&lt;br /&gt;
该技巧的用处在于可以用删除那些相要删除的文件。如果你每天都要为一个非常重要的数据库做一个“dump”报告，你把文件存入dump.'date%h%d'，它包括一系列文件如下： &lt;br /&gt;
&lt;br /&gt;
dump.jun23 &lt;br /&gt;
&lt;br /&gt;
dump jun24 &lt;br /&gt;
&lt;br /&gt;
dump jun25 &lt;br /&gt;
&lt;br /&gt;
dump.jun26 &lt;br /&gt;
&lt;br /&gt;
再让我们假设因为每个文件的容量都在100M左右，所以磁盘空间很快会被占满，因此需要每隔几天删去一些老的文件，只留下最近的两个文件，为此，键入： &lt;br /&gt;
&lt;br /&gt;
rm –i du*[34] &lt;br /&gt;
&lt;br /&gt;
这条指令将删去那些以“du”开头并以“3”或“4”结尾的文件。&lt;/div&gt;</summary>
		<author><name>Tom</name></author>	</entry>

	</feed>