一、正则表达式
1、什么是正则表达式
正则表达式是用于描述字符排列和匹配模式的一种语法。他主要用于字符串的模式分割、匹配、查找及替换操作。
2、正则表达式与通配符
>>> 正则表达式用来在文件中匹配符合条件的字符串,正则表达式包含匹配。grep、awk、sed等命令可以支持正则表达式。
>>>通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配了。
正则:包含匹配
通配符:完全匹配
3、基础正则表达式
4 、“ * ”前面匹配0次,或任意多次
(1):" a* "
# 匹配所有的内容,包括空白行
(2):" aa* "
# 匹配至少包含一个a的行
(3):" aaa* "
# 匹配至少包含两个连续a的字符串
(4):" aaaaa* "
# 匹配至少包含五个连续a的字符串
4、“ . ”匹配除换行符外任意一个字符
(1):“ s..d ”
# " s..d " 会匹配s和d这两个字母之间一定有两个字符的单词
(2):“ s.*d ”
# “ s.*d ” 匹配在s和d这两个字母之间有任意字符
(3):“ .* ”
# “ .* ” 匹配所有内容
5、“ ^ ” 匹配行首,“ $ ” 匹配行尾
(1):“ ^M ”
# 匹配以大写字母 M 开头的行
(2):" n$"
# 匹配以小写字母 n 结尾的行
(3):“ ^$ ”
# 会匹配空白行
6、“ [ ] ” 匹配中括号中指定的任意一个字符,只匹配一个字符(和通配符功能差不多)
(1):“ s[ao]id ”
# 匹配 s 和 i 字母中,要不是 a 、要不是 o
(2):“ [0-9] ”
# 匹配任意一个或多个数字
(3):“ ^[a-z] ”
# 匹配用小写字母开头的行
7、" [^] " 匹配除中括号的字符以外的任意一个字符(去反)
(1):" ^[^a-z] "
# 匹配不用小写字母开头的行
(2):" ^[^a-zA-Z] "
# 匹配不用字母开头的行
8、" \ " 转义符
" \.$ "
# 匹配使用" . " 结尾的行(把特殊字符的含义取消掉)
9、" \{n\} " 表示其前面的字符恰好出现 n 次
(1):" a\{3\} "
# 匹配 a 字母连续出现三次的字符串
(2):" [0-9]\{3\} "
# 匹配包含连续的三个数字的字符串
10、" \{n,\} " 表示其前面的字符出现不小于n次(定义不准确,自己实践)
" ^[0-9]\{3,\}[a-z] "
# 匹配最少用连续三个数字开头的行
加上定界符(定义不准确,自己实践)
11、"\{n,m\} " 匹配其前面的字符至少出现n次,最多出现m次
" sa\{1,3\}i "
# 匹配在字母s和字母i之间最少一个a,最多三个a
12、几个例子
(1):[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}
# 匹配日期格式YYY-MM-DD
(2):[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}.[0-9]\{1,3\}
# 匹配IP地址