正则表达式是一种基础的模式匹配技术。大多数文本处理工具都支持正则表达式。借助适合的正则表达式,我们可以对文本文件执行过滤、剥离(strip)、替换、搜索等操作。
位置标记
1、查找abc开头的行
[root@linux test_shell]# grep "^abc" << end
> abc123
> 123abc
> end
abc123
2、查找abc结尾的行
[root@linux test_shell]# grep "abc$" << end
> abc123
> 123abc
> end
123abc
标识符
1、查找包含abc的行
[root@linux test_shell]# grep "abc" << end
> abc123
> 123abc
> end
abc123
123abc
2、匹配任意一个字符
[root@linux test_shell]# grep "abc." << end
> abc
> abc1
> abc22
> end
abc1
abc22
3、匹配 [ ] 内的任意一个字符
[root@linux test_shell]# grep "abc[0-9]" << end > aaa > abcd > abc333 > end abc333
4、匹配不在 [ ] 内的任意一个字符
[root@linux test_shell]# grep "abc[^0-9]" << end > abc3 > abcd > abc% > end abcd abc%
数量修饰符
1、? 匹配之前的项1次或0次。注意:? 要用转义字符转义
[root@linux test_shell]# grep "ab?c" << end > ac > abc > abbc > end ac abc
2、+ 匹配之前的项1次或多次。注意:+ 要用转义字符转义
[root@linux test_shell]# grep "ab+c" << end > ac > abc > abbc > end abc abbc
3、* 匹配之前的项0次或多次
[root@linux test_shell]# grep "ab*c" << end > ac > abc > abbc > end ac abc abbc
4、{n} 匹配之前的项n次。注意:{ } 要用转义字符转义
[root@linux test_shell]# grep "ab{3}c" << end > ac > abc > abbbc > end abbbc
5、{n,} 之前的项至少需要匹配n次
[root@linux test_shell]# grep "ab{2,}c" << end > abc > abbc > abbbc > end abbc abbbc
6、{n,m} 之前的项所必须匹配的 最小次数 - 最大次数
验证工号
[root@linux test_shell]# grep -w "^a[0-9]{4,6}" << end > a123 > a1234 > a123456 > a12345678 > end a1234 a123456
备注:grep -w ---> 精准匹配
验证QQ邮箱
[root@linux test_shell]# grep -w "^[1-9][0-9]{4,11}@qq.com" << end > 1234@qq.com > 12345678@qq.com > 123456789123456@qq.com > 12345678@qq.cn > 12345678@oo.com > end
12345678@qq.com
其他
1、() 将括号中的内容视为一个整体。注意:() 要用转义字符转义
[root@linux test_shell]# grep "abc(123)+" << end > abc > abc123 > abc123123 > end abc123 abc123123
2、| 指定了一种选择结构,可以匹配 | 两边的任意一项。注意:| 要用转义字符转义
[root@linux test_shell]# grep "a(b|c)" << end > ab > ac > abc > end ab ac abc