linux通配符
在使用shell命令对多个文件对象执行单一操作时,例如删除当前目录下的file1到file8,多次使用相同的命令rm file1到rm file8非常麻烦,通常使用通配符模式解决这个问题:rm file[1-8]。 当使用通配符指定一种模式时,该模式与底层系统上的一个或多个文件匹配,shell以空格隔开的所有匹配对象的列表来替换该模式;当模式不能找到匹配对象时,shell将不理会参数、通配符等,保留原样。例如,当ls -d /etc/g*不能找到/etc/g*的任何文件时,就会报错。
* --------代表任意个字符,但不会匹配以.开始的文件名 --------代表一个字符 / --------转义字符,可将通配符或者特殊字符还原成一般字符 [abc] --------匹配[]里面的某个字符 [a-z] --------匹配a到z之间的某个字符,还能写成[A-Z]、[0-9]、[A-Za-z]等 [!abc] --------匹配任意不包含在[!]里的字符,同样包括[!a-z]等的用法,这里[和!之间不能有空格 {c1,c2} --------同c1或者c2相匹配,其中c1和c2也是通配符,比如{[0-9]abc,[efg]}与[0-9]abc、[efg]均通配 ; --------连续性命令,比如command1;command2,不管前者是否正确,后者都会执行,使用&&和||则会有先后顺序 ! --------逻辑运算中的非 / --------路径字符 $ --------读取变量字符,例如echo $PATH >,>> --------输出导向,分别为清空与末尾累加 ' --------单引号 ' --------双引号 `` --------两个`中间为可以先执行的指令,例如cat /etc/`pwd`/hello.
注意: 使用[]时,[与]之间绝对不能为空,所以[][*]表示[、]与*任意一个字符来匹配,如果要处理与通配符相关的字符,需要使用转义字符/,例如: echo $[abc] 输出结果是a、b或者c变量的值。 echo $/[abc/] 输出结果是[abc]变量的值(举例而已,当然不存在[abc]这样的变量名)。 echo '[abc]' 单引号也能起到与转义字符同样的作用。双引号内部保留所有通配符的原义,而单引号内部将通配符视为普通字符。
2.DOS通配符相比较 与DOS相比,UNIX的通配符机制要比DOS好得多。在DOS中,任何在“*”之后,在“.”之后的字符均被忽略,所以下面的指令将不能得到你想象的结果。 del *bak.* 在DOS中,用户只能用此命令删除当前目前下的所有文件,除非系统要求你不这样做。而在UNIX系统中,“*”可替代包括0在内的任意数字的字符,但一行中的其余特征也仍需匹配,因此“bak.*”可匹配newbak.save、oldbak.new甚至bak.temp,但不能和newbak匹配,因为后者不含“.”。这非常巧妙,可大大方便用户,而“*bak”则可匹配以上所有的词条,包括newbak。
|