正则表达式
分类
基础正则表达式:BRE
扩展正则表达式:ERE
编程语言支持的高级正则表达式
BRE 和 ERE的语法基本一致,只有部分元字符(预定义好的带有特殊含义的一些符号)需要特殊对待
grep sed 默认使用的基本正则表达式,grep -E,sed -r,egrep,awk使用扩展正则表达式
基本正则表达式
匹配字符
abc:匹配字符串"abc",普通字符的匹配
[abcde...]:匹配括号内的任意单个字符
a[xyz]:匹配ax ay az
a[xyz]b:匹配axb ayb azb
\n:匹配换行符
\t:匹配制表符
\w:匹配单词字符 [a-zA-Z0-9]
\W:匹配非单词字符 [^a-zA-Z0-9]
\s:匹配空白字符
\S:匹配非空白字符
\d:匹配数字
\D:匹配非数字
. :匹配任意单个字符
上面所说的单词,在正则表达式中的含义:[a-zA-Z0-9]组成的字符或字符串都是单词
例如 nihao hello world 都是单词
字符组
[a-z]:代表任意单个小写字母
[^a-z]:只要单个非小写字母的其他任意字符
[A-Z]:代表任意大写字母
[0-9]:代表任意单个数字 [0-59] 代表匹配 0-5 和 9
[a-z0-9A-Z]:代表任意字母或数字
[a-z0-9A-Z_]:代表任意字母数字下划线 即匹配单词字符
字符类
[:lower:] 等价于 a-z
[:upper:] 等价于 A-Z
[:alpha:] 等价于 A-Za-z 也等价于[:lower:]+[:upper:]
[:digit:] 等价于0-9
[:alnum:] 等价于 等价于0-9A-Za-z 也等价于[:lower:]+[:upper:]+[:digit:]
[:xdigit:] 匹配十六进制数字 0 1 2 3 4 5 6 7 8 9 a b c d e f (大写也行)
[:blank:] 匹配空格或制表符
[:space:] 匹配空格,制表符,换行符,换页符,垂直制表符,回车符等等所有空白符号
[:punct:] 匹配所有标点符号 ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` {}
[:print:] 可打印字符,等价于[:alnum:]+[:punct:]+空格
[:graph:] 圆形字符,即能展现字符颜色的符号,等价于[:alnum:]+[:punct:]
位置锚定
^ 匹配行首
$ 匹配行尾
\< 匹配单词开头处的位置
\> 匹配单词结尾处的位置
^ 内容 $ 用于匹配整行
^$ 匹配空行
表示次数
* 表示匹配前面的字符任意次,包括0次
.* 任意长度的任意字符
\? 匹配其前面的字符出现0次或1次 即可有可无
\+ 匹配其前面的字符出现最少1次 即:肯定会出现 =>1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符m次 至多n次
\{,n\} 匹配前面的字符至多n次 ,<=n
\{n,\} 匹配前面的字符至少n次
扩展正则表达式
grep -E
egrep 默认使用的 扩展正则
表示次数
* 匹配前面字符任意次
? 0或1次
- 1次或多次
{n} 匹配n次
{m,n} 至少m 至多n次
{,n} 匹配前面的字符至多n次
{n,} 匹配前面的字符至少n次
表示分组
() 分组
分组:() 将多个字符捆绑在一起,当作一个整体处理,如: \(root\)+
后向引用:\1,\2, ...
| 或者
a|b a或b C|cat C或cat (C|c)at Cat 或cat
grep
过滤
格式: grep [选项]... 查找条件 目标文件
选项
-m 匹配m次后停止 grep -m 1 root /etc/passwd #多个匹配只取第一个
-v 取反
-i 忽略大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式 不输出任何信息 一般用于脚本
-A 打印后指定行
-B 打印前指定行
-C 前后各指定行
-e 实现多个选项间逻辑or关系 grep -e root -e bash /etc/passwd #包含root或者包含bash 的行
-w 匹配整个单词
-E 使用ERE 使用扩展正则
-F 不支持正则表达式 相当于 fgrep
-f file根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件
-r 递归目录,但不处理逻辑
-R 递归目录,但处理软连接