# 正则表达式基础
1. " . "
用于匹配除了换行符之外的任意一个字符
grep 'r..t' /etc/passwd 'root','reet' 之类的都能匹配到
2." * "
用于匹配前一个字符0次或者任意多次
grep 'r*t' /etc/passwd 'root','reet','rdsafsdat' 之类的都能匹配到
grep 'r.*t' /etc/passwd 代表查找包含字母r,后面紧跟任意长度的字符,再跟一个字母t的行
3 " \{n,m\}"
虽然用 " * "可以用于重复匹配前一个字符,但是使用"\{n,m\}" 符号则能更加灵活的控制字符的重复次数
,典型的有以下三种形式::
"\{n\}"
匹配前面的字符n次
grep 'ro\{2\}t' /etc/passwd 匹配包含root的行(r和t中包含两个o)
"\{n,\}"
匹配前面的字符,至少n次以上(含n次)
grep 'ro\{0,\}t' /etc/passwd
" \{n,m\}"
匹配前面的字符 n到m次
4." ^ "
用于匹配开头字符 '^root' 匹配的是以root开头的行
grep '^root' /etc/passwd
5. " $"
用于匹配尾部 ,'root$' 代表以root结尾的行 , 则 " ^$ " 代表该行为空
grep '^r.*h$' /ect/passwd 以r开,中间有任意一串字符串,以h结尾
6. " [] "
用于匹配方括号内出现的任意字符,比如说单项选择的答案是ABCD,用正则表示 就是[ABCD]
[A-Z] 所有的大写字母
[a-z] 所有的小写字母
[A-Za-z] 所有的字母
'^'在[]中表示取反的意思
[^A-D] 表示不是大写字母A-D
11位手机号 可以表示为 " ^1[3875][0-9]\{9\} "
7. " \ "
对特殊字符转义
021-888888 " [0-9]\{3\}[\\ -][0-9]\{6\}"
8." \< " 和 " \> "
这两个符号分别用于界定左边界和右边届.
" \<hello" 用于 匹配以hello开头的单词
" hello \>" 用于匹配 以hello结尾的单词
"\<hello\>" 用于精确匹配单词 hello
9." \d " 匹配一个数字,等价于 [0-9]
echo 123 | grep '[0-9]'
echo 123 | grep -P '\d'
10. " \b "
匹配单词边界
" \bhello\b" 精确匹配" hello "单词
11." \B "
匹配非单词的边界, 比如" hello\B" 可以匹配' helloworld' 中的'hello'
echo "helloworld" | grep 'hello\B'
12." \w "
匹配字母,数字和下划线, 等价于 [A-Za-z0-9]
13. " \W"
匹配非字母,非数字,非下划线, 等价于 [^A-Za-z0-9]
echo '\\' |grep '\W'
14. "\n"
匹配一个换行符
15. " \r "
匹配一个回车符
16. " \t "
匹配一个制表符
17. ' \f '
匹配一个换页符
18. '\s'
匹配任何空白字符
19. "\S"
匹配任何非空白字符
# 扩展的正则表达式
1." ? "
用于匹配前一个字符0次或者1次
"ro?t" 仅能匹配rot 或者 rt
2. " + "
用来匹配前一个字符1次以上
" ro+t " 可以匹配 rot root 等
3." | " 或的 意思
区号是3位的固定电话 ^0[0-9]\{2\}-[0-9]\{8\}
区号是4位的固定电话 ^0[0-9]\{3\}-[0-9]\{8\}
两种合起来写 ^0[0-9]\{2,3\}-[0-9]\{8\}
也可以 ^0[0-9]\{2\}-[0-9]\{8\} | ^0[0-9]\{3\}-[0-9]\{8\}
4. " () "
通常和" | " 联合使用,用于枚举一系列可以替换的字符
匹配 021-11111111 和 0215 11111111
^0[0-9]\{2,3\}(- | )[0-9]\{8\}
^0[0-9]\{2,3\}[\ \-][0-9]\{8\}
匹配 hard . hold . hood
h(ar|oo|ol)d
# 通配符
通配符是一种特殊的语句,主要包含" * " 和 " ? "还有("{}", " ^ ", "!")
主要是用来模糊搜索文件
1." * "
ls -al *.doc 列出目录中以.doc结尾的文件
ls -al A*.php 列出目录中以A开头的.php文件
2. " ? "
代表任意一个字符 ,占位符
ls -al A?.doc 列出所有以A开头 并且 名称只有两个字符的doc文件
3." {} "
可以匹配所有括号内包含的 以逗号隔开的字符
ls -al {A-C}.php
ls -al {A,B,C}.php 列出所有以A B C 的以.php结尾的文件
ls -al {[A-Z]*.doc,[0-9]??.txt} 所有大写字母开头的doc文件和所有数字开头 并且名称只有三个字符的txt文件
4. " ^ " 和 " ! "
[^A] 和 [!A]代表不是A