我们在很多地方都会用到通配符和正则表达式来实现我们的日常操作,提高我们的工作效率。但是很多新伙伴,往往容易将他们弄混。
首先我们需要知道通配符和正则表达式的使用场景:
通配符也叫文件名替换,它主要是作用于匹配文件名,常用命令是ls、find、cp、mv;
正则表达式主要是作用于匹配文件中的字符串,常用命令命令是grep、awk、sed。
通配符日常使用:
*** 匹配0或者多个字符**
实例:
#匹配前:
[root@localhost test]# ls
f f-1.txt f-2.txt f-3.txt ff
#匹配后:
[root@localhost test]# ls f*
f f-1.txt f-2.txt f-3.txt ff
因为f后面可以跟0个或者多个字符,所有f文件也匹配到了。
[] 匹配括号中的单个字符
实例:
#匹配前:
[root@localhost test]# ls
f f-1.txt f-2.txt f-3.txt ff
#匹配后:
[root@localhost test]# ls f-[12].txt
f-1.txt f-2.txt
这里要注意,因为匹配的单个字符,所以后面.txt也要补全,否则会报文件找不到。
? 匹配任意单个字符
实例:
#匹配前:
[root@localhost test]# ls
f f-1.txt f-2.txt f-3.txt ff
#匹配后:
[root@localhost test]# ls f-?.txt
f-1.txt f-2.txt f-3.txt
[!] 匹配不在括号中的任意单个字符
实例:
#匹配前:
[root@localhost test]# ls
f f-1.txt f-2.txt f-3.txt ff
#匹配后:
[root@localhost test]# ls f-[!12].txt
f-3.txt
[a-z] 匹配a到z中的任意单个字符,表示范围,只能用于查找文件,不能创建
实例:
#匹配前:
[root@localhost test]# ls
f f-12.txt f-1.txt f-2.txt f-3.txt
#匹配后:
[root@localhost test]# ls f-[1-2].txt
f-1.txt f-2.txt
{a,b,c}/{a..z} 以逗号分隔时,表示单独字符,以两个点号分隔时,表示连续字符。可用于查找和创建文件。
实例:
匹配前:
[root@localhost test]# ls
a.txt d.txt f-12.txt f-3.txt g.txt j.txt m.txt p.txt s.txt u.txt x.txt
b.txt e.txt f-1.txt ff h.txt k.txt n.txt q.txt t-[1-9].txt v.txt y.txt
c.txt f f-2.txt f.txt i.txt l.txt o.txt r.txt t.txt w.txt z.txt
匹配后:
[root@localhost test]# ls {a..z}.txt
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@localhost test]# ls {a,b,c}.txt
a.txt b.txt c.txt
ps:当用逗号分隔时,查找效果和[abc]是一样的。
正则表达式日常使用:
ps:做个纠正,
"{}"是扩展正则,所以grep不能直接使用,需要加-E或者使用egrep。
* 匹配前一个字符0次或者多次
实例:
. 匹配除了换行符以外的任意单个字符
实例:
^ 锚定行首
实例:
$ 锚定行尾
实例:
[] 匹配括号中指定的任意单个字符
实例:
[^] 匹配括号中以外的任意单个字符
实例:
\ 转义符,取消元字符的特殊含义
实例:
\{n\} 表示前面的字符出现几次,如果不想使用\,可以使用egrep
实例:
\{n,\} 至少匹配前面的字符n次
实例:
\{n,m\} 至少匹配前面的字符n次,但是不得多于m次
实例:
ps:一定要注意,在通配符中,{}可以用来表示连续的字符,但是在正则表达式中,是表示前面字符出现的次数。
今天就先说到这,后面我们继续探讨拓展正则表达式。
获取文章更新,以及常用软件,可以关注公众号: 笨办法学linux