课程地址: https://edu.51cto.com/course/15965.html
正则表达式种类
普通正则表达式,定了一些基础的符号及其含义
扩展正则表达式,除了基础的符号,又扩展了更多的符号 + ?
基本符号和语法
点(.): 匹配任意单个字符(除了换行符)。
示例: a.c 可以匹配 "abc" 或 "a2c"。
星号(*): 表示前面的字符可以出现零次或多次。
示例: a* 可以匹配 "" (空字符串)、"a"、"aa" 等。
加号(+): 表示前面的字符至少出现一次。
示例: a+ 只能匹配 "a"、"aa" 等,但不能匹配空字符串。
问号(?): 表示前面的字符可以出现零次或一次。
示例: a? 可以匹配 "" 或 "a"。
方括号([]): 定义一个字符集,匹配其中的任何一个字符。
示例: [abc] 可以匹配 "a"、"b" 或 "c", [^abc] 排除匹配 "a"或"b" 或 "c"。
范围(-): 在方括号内使用,定义一个字符范围。
示例: [a-z] 可以匹配任何小写字母。
反斜杠(\): 用于转义特殊字符。
示例: \.或\* 用来匹配实际的点或星号。
分组捕获(()): 将部分表达式组合起来作为一个整体。
示例: (ab)+ 匹配 "ab"、"abab" 等。
非捕获分组(?:) / (?!): 类似于分组,但不进行捕获。
示例: (?:ab)+ 同上,但不会捕获 "ab"。
量词{m,n}: 指定前面的字符出现的次数,m代表最少次数,n代表最多次数。
示例: a{3} 只匹配 "aaa";a{2,4} 匹配 "aa"、"aaa" 或 "aaaa"。
锚点(^ 和 $): 分别表示字符串的开始和结束位置。
示例: ^abc 只匹配以 "abc" 开头的字符串;abc$ 只匹配以 "abc" 结尾的字符串。
选择(|): 匹配前面或后面的部分。
示例: cat|dog 可以匹配 "cat" 或 "dog"。
示例文本文件19-wangtao.txt
wangtao1 28 hangzhou
wangtao2 30 shenzhen
wangtao3 32 shanghai
zhangsan1 33 hangzhou
zhangsan2 34 foreign
zhangsan3 18 beijing
wangtao.test
shijange888
wangtaowangtao
ABCZ
whoiAm
<body><replaceHost>0</replaceHost><replacePort>0</replacePort><seq>1340517858</seq></body>
grep注意事项
grep默认只支持普通正则,如果使用扩展正则,则需要使用egrep 或 grep -E
扩展正则
? 前面字符出现0次或者1次
+ 前面字符出现1次或者多次
cat 19-wangtao.txt|egrep 'wangtao1?'
[root@k8s-node01 shell]# cat 19-wangtao.txt |egrep 'wangtao1?'
wangtao1 28 hangzhou
wangtao2 30 shenzhen
wangtao3 32 shanghai
wangtao.test
wangtaowangtao
cat 19-wangtao.txt|egrep 'wangtao1+'
[root@k8s-node01 shell]# cat 19-wangtao.txt |egrep 'wangtao1+'
wangtao1 28 hangzhou
{n} 前面字符匹配n次
{a,b} 前面字符匹配a到b次
{,b} 前面字符匹配0次到b次【最多b次】
{a,} 前面字符匹配a或a+次【最少a次】
cat 19-wangtao.txt|egrep 'wangtao1{4}'
cat 19-wangtao.txt|egrep 'wangtao1{1,4}'
cat 19-wangtao.txt|egrep 'wangtao1{4,}'
(wangtao)分组匹配
cat 19-wangtao.txt|egrep '(wangtao){2}'