通配符与正则表达式的学习
二者的使用场景
-
通配符主要作用于文件名的匹配,常用命令为ls、find、cp、mv
-
正则表达式主要用于匹配文件中的字符串,常用命令为grep、awk、sed
通配符
通配符 | 含义 | 例子 | 匹配 |
---|---|---|---|
* | 匹配0个或多个字符 | a* | 以a开头的所有文件 |
[] | 匹配括号中的单个字符 | [abc]*/[a-c]* | 以abc中任意一个字符开头的文件 |
[!]/[^] | 匹配不在括号中的任意单个字符 | [!abc]*/[^abc] | 除了abc中任意字符开头的文件 |
? | 匹配任意单个字符 | a?.doc | 以a开头后接一个字符,并且以.doc结尾的文件 |
{} | 表示生成序列 | {a,b,c}*/{a…c}* | 以abc中任意一个字符开头的文件 |
[abc]/[a-z]与{a,b,c}/{a…z}的区别
[abc]/[a-z]只能用于查找文件,而{a,b,c}/{a…z}可用于查找和创建 文件,在勇于查找文件时,二者作用一样
#{}能用于创建文件
[root@VM-0-17-centos temp]# touch {a..z}.txt
[root@VM-0-17-centos temp]# ls
a.txt c.txt e.txt g.txt i.txt k.txt m.txt o.txt q.txt s.txt u.txt w.txt y.txt
b.txt d.txt f.txt h.txt j.txt l.txt n.txt p.txt r.txt t.txt v.txt x.txt z.txt
#[]不能用于创建文件
[root@VM-0-17-centos temp]# touch [a-z].txt
[root@VM-0-17-centos temp]# ls
[a-z].txt
正则表达式
正则表达式 | 含义 |
---|---|
* | 匹配前一个子表达式0次或多次 |
+ | 匹配前面的子表达式一次或多次 |
. | 匹配除了换行符以外的任意单个字符 |
? | 匹配前面的子表达式零次或一次,或者表示匹配模式非贪婪 |
^ | 字符串首 |
$ | 字符串尾 |
[abc] | 匹配括号内的任意单个字符 |
[^abc] | 匹配除括号内的任意单个字符 |
\ | 转义符,取消元字符的特殊含义或形成一个元字符 |
{n} | 表示前面的字符出现n次 |
{n,} | 表示前面的字符至少出现n次 |
{n,m} | 表示前面的字符至少出现n次,最多m次 |
(Pattern) | 匹配 pattern 并获取这一匹配。 |
\d | 匹配一个数字字符,等价于[0-9] |
\D | 匹配一个非数字字符,等价于[^0-9] |
\w | 匹配字母、数字、下划线。等价于[A-Za-z0-9_] |
\W | 匹配非字母、数字、下划线。等价于 [^A-Za-z0-9_] |
关于?的说明
- 匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。
- 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 “aaaa”,‘a+?’ 将匹配单个 “a”,而 ‘a+’ 将匹配所有 ‘a’。
好用的网站
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-852XCj01-1619492752373)(https://static01.imgkr.com/temp/8140fb94a0364b4ea206d09e3a761ffe.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LHzOZGpA-1619492752374)(https://static01.imgkr.com/temp/e24d4b5587bf4418a28a666ac9d2d534.png)]