正则表达式
匹配包含的文本字符串(正则是包含的关系,只要包含就匹配)
- 基础正则表达式:通过grep加载
- 扩展正则表达式:通过egrep或者grep -E
grep -v 取反
基础正则表达式
- n* (星号):匹配包含前一个字符的n匹配0次或者任意多次(如果星号前面就一个字符那匹配0次就代表匹配全部,文本的全部)
- .(点):匹配包含任意一个字符(换行符除外)
- ^ :匹配首行
- $:匹配末行
- [ ](中括号):匹配包含中括号中的任意一个字符,范围用 1-9(一横)
- [^ ] (中括号内+尖角号):取反,区别于中括号外+尖角号 ^ [ ]
- \ :取消特殊字符的含义,变成普通字符
- {n}:前面字符出现的n次
- {n,}:前面字符出现大于等于n次
- {n,m}:前面字符出现大于n次,小于m次
使用grep -E的时候最后三个\ 不要加反斜号{n,m}
扩展正则表达式
- +:前一个符号匹配1次或者多次
- ?:前一个符号匹配0次或者1次
- | :或的关系
- ():代表一个整体字符
练习题:
1、显示/proc/meminfo文件中以大写S和A开头的行
egrep "^(A|S)" /proc/meminfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v "/bin/bash$" /etc/passwd
3、显示/etc/passwd文件中s开头的4位用户
grep "^s...:" /etc/passwd
4、显示/etc/passwd文件中有空格的行(不区分大小写)
grep -i "[0-9a-z] [0-9a-z]" /etc/passwd
5、显示/etc/passwd文件中空白行
grep "^$" /etc/passwd
6、显示/etc/passwd文件中的两位数或三位数
egrep "[0-9]{2,3}" /etc/passwd