文章目录
- 一. 定义
- 二. 常见通配符
- 1. 匹配一个
- 1.1 " . " 点符号
- 1.2. " ? "符号:代表任意一个
- 1.3. " $ "符号:匹配尾部
- 1.4. " [] "符号
- 1.5. " ^ "符号和" ! "符号
- 2. 匹配多个
- 2.1. " * "符号
- 2.2. " \{n,m\} "符号
- 2.3. " {} "符号
- 三、元字符 与转义符
一. 定义
正则表达式就是能用某种模式去匹配一类字符串的公式,它是由一串字符和元字符构成的字符串。所谓元字符,就是用以阐述字符表达式的内容、转换和描述各种操作信息的字符。
二. 常见通配符
1. 匹配一个
1.1 " . " 点符号
点符号用于匹配除换行符之外的任意一个字符。
[root@localhost ~]# grep 'r..t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
1.2. " ? "符号:代表任意一个
当它作为通配符使用时,代表的是任意一个字符。
如果要列出以字母A开头、中间有一个字母的文件名、以.doc结尾的文件,就需要使用“?”了。
[root@localhost ~]# ls-l A?.doc
1.3. " $ "符号:匹配尾部
" $ “用于匹配尾部,比如说” abc$ "代表的是以abc结尾的行。
" ^$ ": 则代表该行为空,因为 ^ 和 $ 间什么都没有
# 以r开头,中间有一串任意字符,以h结尾的行
[root@localhost ~]# grep '^r.*h$' /etc/passwd
root:x:0:0:root:/root:/bin/bash
1.4. " [] "符号
用于匹配方括号内出现的任一字符
A、B、C、D选项中的任意一种,用正则表达式表示就是[ABCD]
要匹配任意一个大写字母,就需要使用“-”号做范围限定,写成[A-Z],要匹配所有字母则写成[A-Za-z]。
匹配手机号:“^1[38][0-9]{9}”
1.5. " ^ “符号和” ! "符号
- 当出现在“[]”中的时候,代表取反。[^A](或[!A])代表不是A。
- 用于匹配开头。比如说“^root”匹配的是以字母root开始的行。
[root@localhost ~]# grep '^root'
/etc/passwdroot:x:0:0:root:/root:/bin/bash
2. 匹配多个
2.1. " * "符号
代表0个或多个字符。比如*.doc指所有以.doc结尾的文件。
“”号经常和“.”符号加在一起使用。比如“.”代表任意长度的不包含换行的字符。
[root@localhost ~]# grep 'r*t' /etc/passwd
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
。。。。
2.2. " {n,m} "符号
" * "不能精确地控制匹配的重复次数,但使用“{n,m}”符号则能更加灵活地控制字符的重复次数.
2.3. " {} "符号
匹配所有括号内包含的以逗号隔开的字符。
例如,下面列出了所有以字母A、B、C开头,以.doc结尾的文件:
#第一种方法:用“{}”
[root@localhost ~]# ls -l {A,B,C}.doc
#第二种方法:用“[]”
[root@localhost ~]# ls -l [A-C].doc
#以上两种方法都能满足题意,但是如果要列出以字母AB或者CD开头、以.doc结尾的文件,就只能用“{}”了。
[root@localhost ~]# ls -l {[A-Z]*.doc,[0-9]??.txt}
三、元字符 与转义符
参考:
https://www.cnblogs.com/chengmo/archive/2010/10/17/1853344.html