文件通配符*
匹配零个或多个
字符 ? 匹配任何单个字符 ~ 当前用户家目录 ~mage 用户mage家目录 ~+ 当前工作目录 ~- 前一个工作目录 [0-9] 匹配数字范围 [a-z]:字母(或的关系)就是表示中括号中的某一个字符 [A-Z]:字母 [a-c]:a A b B c [A-C]:A b B c C,也就是[]在里面匹配字母时是以aAbB...这样排序的 [wang] 匹配列表中的任何的一个字符 [^wang] 匹配列表中的所有字符以外的字符 {}花括号用来匹配一组用逗号分隔的字符串中的任一个。 左花括号之前的所有字符称为前文(preamble),右花括号之后的所有字符称为后文(preamble)。 前文和后文都是可选的。花括号中不能包含不加引号的空白符预定义的字符类:man 7 glob(通配符) [:digit:]:
任意数字,相当于0-9 [:lower:]:任意小写字母[:lower:] 这个只相当于a-z,表示的时候必须要在加上中括号 [:upper:]: 任意大写字母 [:alpha:]: 任意大小写字母 [:alnum:]:任意数字或字母 [:blank:]:水平空白字符 [:space:]:水平或垂直空白字符 [:punct:]:标点符号 [:print:]:可打印字符 [:cntrl:]:控制(非打印)字符 [:graph:]:图形字符 [:xdigit:]:十六进制字符ls命令的功能: 列出当前目录的内容或指定目录ls命令的用法:ls [options] [files_or_dirs] 示例: ls -a 包含隐藏文件 ls -l 显示额外的信息 ls -r 倒转排序或者可以说是逆序排列 ls -R 目录递归通过(递归会进入到子目录) ls -ld 目录和符号链接信息 ls -1 文件分行显示(列显示) ls –S 按从大到小排序(按文件的大小排序) ls –t 按mtime排序(按文件的修改时间排序) ls –u 配合-t选项,显示并按atime从新到旧排序 ls –U 按目录存放顺序显示(以创建文件的次序进行显示) ls –X 按文件后缀排序 ls -d 列出目录本身并不显示内容 ls -h 单位换算 ls -I --ignore(忽略)=PATTERN(模式)按着规定的模式去隐藏不进行显示 实例: 1、显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现至少一位数 字的文件或目录 ls -d /var/l*[0-9]*[[:lower:]] 2、显示/etc目录下以任意一位数字开头,且以非数字结尾的文件或目录 ls -d /etc/[0-9]*[^0-9] 3、显示/etc/目录下以非字母开头,后面跟了一个字母及其它任意长度任意字符 的文件或目录 ls -d /etc/[^[:alpha:]][[:alpha:]]* 4、显示/etc/目录下所有以rc开头,并后面是0-6之间的数字,其它为任意字符 的文件或目录 ls -d /etc/rc[0-6]* 5、显示/etc目录下,所有以.d结尾的文件或目录 ls -d /etc/*.d 6、显示/etc目录下,所有.conf结尾,且以m,n,r,p开头的文件或目录 ls -d /etc/[mnrp]*.conf 7、只显示/root下的隐藏文件和目录 ls -d /root/.* ls -aI "[^.]*" 当前目录为/root l. ls -d .* --color=auto 当前目录为/root 8、只显示/etc下的非隐藏目录 ls -d /etc/*/通配符 1、基本的通配符有哪些? ·“?”可替代单个字符。 ·“*”可替代任意字符。 ·方括号“[charset]”可替代charset集中的任何单个字符。 对最后一条做些解释。[cChH]通配符便可替代c或h字符的大小写形式。 通配符集还能描述介于字符对之间的所有字符。如“[a-z]”就可以代 替任意小写字母,而[a-zA-Z]则可替代任意字母。注意可替代的字符 包括字符包括字符对之间的所有字符。 与DOS相比,UNIX的通配符机制要比DOS好得多。在DOS中,任何在“*” 之后,在“.”之彰的字符均被忽略,所以下面的指令将不能得到你想 象的结果。 del *bak.* 在DOS中,用户只能用此命令删除当前目前下的所有文件,除非系统要 求你不这样做。而在UNIX系统中,“*”可替代包括0在内的任意数字的 字符,但一行中的其余特征也仍需匹配,因此“bak.*”可匹配 newbak.save、oldbak.new甚至bak.temp,但不能和newbak匹配,因为后 者不含“.”。这非常巧妙,可大大方便用户,而“*bak”则可匹配以上 所有的词条,包括newbak。 2、能在一条指令中用多个通配符吗? 可以,如 rm a*out*tmp? 该命令可以删除一系列临时性的输出文件,如ab.out.temp1、ab.out.temp1 等。 3、如何利用通配符使指令更灵活? UNIX可将有一定关的文件看作一集合的一部分,用户可以用该集合去匹配。 所以,如果你需要删除file1.temp、file2.temp……file9.temp,只须健入: rm file[0-9].temp 该技巧的用处在于可以用删除那些相要删除的文件。如果你每天都要为一个 非常重要的 数据库 做一个“dump”报告,你把文件存入dump.date%h%d, 它包括一系列文件如下: dump.jun23 dump jun24 dump jun25 dump.jun26 再让我们假设因为每个文件的容量都在100M左右,所以磁盘空间很快会被占满, 因此需要每隔几天删去一些老的文件,只留下最近的两个文件,为此,键入: rm –i du*[34] 这条指令将删去那些以“du”开头并以“3”或“4”结尾的文件。通配符
它是由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号,linux系统通配符有几下几种:
*:匹配任意多个字符
?:匹配任意一个字符
[...]:匹配中括号内出现的任意一个字符
[!...]:不匹配中括号内出现的任意一个字符
一般出现在要shell命令或脚本中,匹配特定的文件名
正则表达式
它是一个字符匹配标准,一些命令工具按此标准实现字符匹配,根据命令支持的匹配功能可分为基础正则表达式和扩展正则表达式,常用于支持正则表达式的工具,如sed,grep,awk...
有如下一些常用的匹配元字符:
字符匹配
.:匹配任意单个字符
*:匹配其前面一个字符出现任意次
?:匹配其前面的字符1次或0次
+:匹配其前面一个字符出现至少一次(在扩展正则表达式中)
位置匹配
^:锚定行首
$:锚定行尾
\<或\b:锚定词首,其后面的任意字符必须作为单词首部出现
\>或\b:锚定词尾,其前面的任意字符必须作为单词尾部出现
\B:非单词的开头或结尾
^$:空白行
分组() :
(ab)* : 匹配ab这个分组出现任意次
\1:引用第一个左括号以及与之对应的右括号所包括的所有内容,同理还有\2,\3
特殊子字符类:
[:alnum:] :任何字母和数字
[:alpha:] :任何字母
[:cntrl:] :控制字符. 在ASCII表中对应八进制000 到 037, 和177 ('DEL').
[:digit:] :任何数字
[:graph:] :匹配打印字符,相当于'[:alnum:]' +'[:punct:]'.
[:lower:] :小写字母
[:print:] :可打印字符,相当于 '[:alnum:]', '[:punct:]', 和space.
[:punct:] 标点符号,'! " # $ % &' ( ) * + , - . / : <= >? @ [ \ ] ^ _ ' { | } ~'
[:space:] 空白字符,tab, newline, vertical tab, form feed, carriage return, and space.
[:upper:] 大写字母
[:xdigit:] 任何16进制的数字,相当于[0-9a-fA-F]
所以:^[[:space:]]*$ :匹配没有任何内容的行
需要注意:[]中的特殊字符如.已经失去了其特殊含义,和方括号中的普通字符[abc]一样。
评论列表(0条)