Linux-常⽤通配符
linux常⽤通配符有* ,?,[ ],[^],[:space:],[:punct:],[:lower:],[:upper:],[:digit:],[:alnum:]等等。
在linux中,有通配符及正则表达式,那么什么是通配符和正则表达式,什么时候⽤?
通配符
它是由shell解析,并且⼀般⽤于匹配⽂件名,实际上就是shell解释器去解析的特殊符号,linux系统通配符有⼏下⼏种:
*:匹配任意多个字符
:匹配任意⼀个字符
[...]:匹配中括号内出现的任意⼀个字符
[!...]:不匹配中括号内出现的任意⼀个字符
⼀般出现在要shell命令或脚本中,匹配特定的⽂件名
正则表达式
它是⼀个字符匹配标准,⼀些命令⼯具按此标准实现字符匹配,根据命令⽀持的匹配功能可分为基础正则表达式和扩展正则表达式,常⽤于⽀持正则表达式的⼯具,如sed,grep,
有如下⼀些常⽤的匹配元字符:
字符匹配
.:匹配任意单个字符
*:匹配其前⾯⼀个字符出现任意次
:匹配其前⾯的字符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]⼀样。
⽅法/步骤
1. 1
*  匹配任意长度的任意字符
匹配任意单个字符
⽐如我们创建abc,a1c,a1bc,a12c四个⽂件(touch abc a1c a1bc a12c)ls a*c  表⽰查看a开头c结尾的所有⽂件(abc,a1c,a1bc,a12c)
ls a?c  表⽰查看a开头c结尾中间带有⼀个字符的⽂件(abc,a1c)
2. 2
[ ]匹配制定范围内的单个字符[^]匹配制定范围外的单个字符
ls a[0-9]c            列出a开头c结尾中间带有⼀个数字的⽂件
ls a[0-9][a-z]c    列出a开头c结尾中间带有⼀个数字和⼀个字母的⽂件
ls a[^0-9]c            列出a开头c结尾中间带有⼀个数字的⽂件
其输出结果如下图
3. 3
[:space:]匹配单个空⽩字符
[:punct:]匹配单个标点符号字符
[:lower:]匹配单个⼩写字母字符
[:upper:]匹配单个⼤写字母字符
[:digit:]匹配单个数字字符
[:alnum:]匹配单个数字和字母字符
以上通配符在使⽤时还需在加⼀个[ ]
例如:
list a[[:space:]]b  列出a空格b的⽂件
list a[[:space:]][[:space:]]  列出a空格空格b的⽂件