linux中grep命令
grep [option] "pattern" 文件名
grep "root" /etc/passwd 过滤带有root 字符
正则表达式元字符
1匹配单个字符的元字符
. 表示任意单个字符
[root@localhost ~]# grep "r..t" /etc/passwd
[abc] 或者
[root@localhost ~]# grep "r[aA]t" /tmp/1.txt
- 连续的字符范围
[a-z] [A-Z] [a-zA-Z] [0-9] [a-zA-Z0-9]
[root@localhost ~]# grep "r[A-Z]t" /tmp/1.txt
rAt
[root@localhost ~]# grep "r[0-9]t" /tmp/1.txt
r8t
[root@localhost ~]# grep "r[a-zA-Z0-9]t" /tmp/1.txt
r8t
rAt
^ 取反
[^a-z]
[root@localhost ~]# grep "r[^0-9]t" /tmp/1.txt
rAt
特殊字符集:
[[:punct:]] 任意单个标
[root@localhost ~]# grep -En "r[[:punct:]]t" /tmp/1.txt
11:r,t
12:r?t
13:r"t"
[[:space:]]任意单个空白字符
[root@localhost ~]# grep -En "r[[:space:]]t" /tmp/1.txt
14:r t
2 匹配字符出现的位置
1) ^string 以string 开头
2)^[rbh] 查找以rbh 开头-----取反 ^[^rbh]
[root@localhost ~]# grep "^[^rbh]" /etc/passwd
3) string& 以string 结尾
[root@localhost ~]# grep "bash&" /etc/passwd
[root@localhost ~]# grep "nologin&" /etc/passwd | wc -l
4) ^& 空行
[root@localhost ~]# grep "^&" /etc/fstab | wc -l
显示/etc下的目录名
[root@localhost ~]# ls -l /etc/ | grep "^d"
3 匹配字符出现的次数
* 匹配前一个字符出现的任意次 ab*: a ab abb abbb
[root@localhost ~]# grep "ab*" /tmp/2.txt
.* 任意字符
? 前一个字符最多出现一次 最少出现0次或一次
* 0 or 多次
+ one or more times.(一次或者多次)
{n} 字符精确出现几次
{n,} 最少n次 多了不限
{,m} 最多m次
{n,m} 最少n次 做多m次
\? 0次或者1次 可有可无
[root@localhost ~]# grep "ab\?" /tmp/2.txt
\+ 1次或者多次 最少1次
[root@localhost ~]# grep "ab\+" /tmp/2.txt
\{2\} 精确匹配2次
[root@localhost ~]# grep "ab\{2\}" /tmp/2.txt
\{2,5\} 最少2次 最多5次
[root@localhost ~]# grep "ab\{2,5\}" /tmp/2.txt
\{2,\} 最少2次
[root@localhost ~]# grep "ab\{2,\}" /tmp/2.txt
分组 \(ab)\+
[root@localhost ~]# grep "\(ab\){2,\}" /usr/share/dict/words
option选项:
1) -i 忽略大小写
[root@localhost ~]# grep -i "^r" /tmp/1.txt
2) -o 仅显示符合正则表达式的内容,不再显示整行
xpl@localhost ~]$ grep -o "r..t" /etc/passwd
3) -v 反向过滤
[root@localhost ~]# grep -v "^#" /etc/fstab
4) -e 根据多个选项过滤文本
[root@localhost ~]# grep -e "^&" -e "^#" /etc/fstab
[root@localhost ~]# grep -v -e "^&" -e "^#" /etc/fstab 不显示
5)-E 支持扩展正则表达式
[root@localhost ~]# grep -E "\(ab\){2,\}" /usr/share/dict/words
cpu信息
[root@localhost ~]# cat /proc/cpuinfo
[root@localhost ~]# grep -E "vmx|svm" /proc/cpuinfo
6) -A n 同时显示符合条件的后n行
[root@localhost ~]# ifconfig eth0 | grep -A 2 "network"
-B n 同时显示符合条件前n
[root@localhost ~]# ifconfig eth0 | grep -B 2 "network"