grep 例子

索引出小写字母所在的行

[root@lb03 ~]# grep  '[[:lower:]]'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

所有的大写字母

[root@lb03 ~]# grep  '[[:upper:]]'  passwd 
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin

所有的大小写字母

[root@lb03 ~]# grep  '[[:alpha:]]'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

所有的数字

[root@lb03 ~]# grep  '[[:digit:]]'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

所有的小写字母与数字

[root@lb03 ~]# grep  '[[:alnum:]]'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

所有的特殊符号

[root@lb03 ~]# grep  '[[:punct:]]'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

所有的空白字符

[root@lb03 ~]# grep  '[[:space:]]'  passwd 
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin

选项:

参数

解释

-i

忽略大小写

-v

排除

-n

显示过滤出来的内容所在文件的行号

-c

统计过滤出来的总行数

-w

精确匹配单词

-o

只显示过滤出来的内容

-E

支持扩展正则

-r

递归过滤

-R

递归过滤

-A

显示出过滤的出来的内容向下多少行

-B

显示出过滤的出来的内容向上多少行

-C

显示出过滤的出来的内容向上或向下多少行

忽略大小写

[root@lb03 ~]# grep  -i  'root'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@lb03 ~]# echo 'ROOT'  >> passwd
[root@lb03 ~]# grep  -i  'root'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT

统计过滤出来的行数

[root@lb03 ~]# grep  -ic  'root'  passwd 
3

显示统计出来的行号

[root@lb03 ~]# grep  -in  'root'  passwd 
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
22:ROOT

选择不含 /sbin/nologin 的行

[root@lb03 ~]# grep -v  '/sbin/nologin'  passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
ROOT

精确匹配一个单词

[root@lb03 ~]# echo 'roott'  >> passwd
[root@lb03 ~]# grep  -i  'root'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT
roott
[root@lb03 ~]# grep  -iw  'root'  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT

只显示搜索出来的内容

[root@lb03 ~]# grep  -o  'root'  passwd 
root
root
root
root
root

递归过滤

[root@lb03 ~]# grep -r   'root'  ./*
./anaconda-ks.cfg:rootpw --iscrypted $6$uxSmIs.46F1YbJYk$W0p9dIjeZPPe556u5YJGhQvOQyEdTk2Q9pHELzfEvDFfUXbKSiyUB9RDAPsfpzSj9BoBXMoyYP87m2qv5xW56/
./anaconda-ks.cfg:pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
./data/oldboy.txt:root
./data/oldboy.sh:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott

显示 存在adm字符的行 和上面2行

[root@lb03 ~]# grep -n -A 2 'adm'  passwd 
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6-sync:x:5:0:sync:/sbin:/bin/sync

显示 adm存在行 和 下面2行

[root@lb03 ~]# grep -n -B 2 'adm'  passwd 
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
```bash

## 显示adm存在的行 和 -A -B 
```bash
[root@lb03 ~]# grep -n -C 2 'adm'  passwd 
2-bin:x:1:1:bin:/bin:/sbin/nologin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5-lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6-sync:x:5:0:sync:/sbin:/bin/sync

过滤以r开头的行

[root@lb03 ~]# grep  '^r'  passwd 
root:x:0:0:root:/root:/bin/bash
roott

过滤以t为结尾的行

[root@lb03 ~]# grep  't$'  passwd 
halt:x:7:0:halt:/sbin:/sbin/halt
roott
[root@lb03 ~]# vim passwd

过滤空行

[root@lb03 ~]# grep  '^$'  passwd

过滤任意一个字符

[root@lb03 ~]# grep '.'  passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

匹配所有

[root@lb03 ~]# grep  '.*'  passwd
root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

过滤以点为结尾的行

[root@lb03 ~]# grep '\.$'  passwd
oldboy.

匹配任意一组数字

[root@lb03 ~]# grep -E  '[0-9]+'  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

| () [] 的使用

[root@lb03 ~]# grep  '^r'  passwd 
root:x:0:0:root:/root:/bin/bash
roott
[root@lb03 ~]# grep  '^r|^l'  passwd 
[root@lb03 ~]# grep -E   '^r|^l'  passwd 
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
roott
[root@lb03 ~]# grep  '^[rl]'  passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
roott
[root@lb03 ~]# grep  -E  '^(r|l)'  passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
roott
[root@lb03 ~]# grep  -E  '^(rl)'  passwd
[root@lb03 ~]# echo 'rlgrtueigh'  >> passwd
[root@lb03 ~]# grep  -E  '^(rl)'  passwd
rlgrtueigh

过滤以r或R开头的行

[root@lb03 ~]# grep  -E '^r|^R'  passwd 
root:x:0:0:root:/root:/bin/bash
ROOT
roott
rlgrtueigh
[root@lb03 ~]# grep  -Ei  '^r'  passwd 
root:x:0:0:root:/root:/bin/bash
ROOT
roott
rlgrtueigh
[root@lb03 ~]# grep -E  '^(r|R)'   passwd
root:x:0:0:root:/root:/bin/bash
ROOT
roott
rlgrtueigh
[root@lb03 ~]# grep  '^[rR]'  passwd
root:x:0:0:root:/root:/bin/bash
ROOT
roott
rlgrtueigh

取反,不以r或R开头的行

[root@lb03 ~]# grep  -E  '^[^rR]'  passwd 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


[root@lb03 ~]# grep  -v  '^[rR]'  passwd

统计passwd文件中所有字母出现的次数

[root@lb03 ~]# grep -o  '[a-Z]'  passwd  |sort |uniq -c |sort -rn
     80 n
     77 o
     62 s
     55 i
     42 t
     38 b
     36 l
     34 a
     33 e
     29 r
     26 g
     25 d
     24 x

统计passwd文件中所有单词出现的次数

[root@lb03 ~]# grep -Eo  '[a-Z]+'  passwd  |sort |uniq -c |sort -rn
     23 sbin
     21 x
     17 nologin
      6 var
      5 bin
      4 root
      3 sync
      3 spool
      3 shutdown

[root@lb03 ~]# grep -o  '[a-Z]*'  passwd  |sort |uniq -c |sort -rn
     23 sbin
     21 x
     17 nologin
      6 var
      5 bin
      4 root
      3 sync
      3 spool
      3 shutdown

取ip地址

[root@lb03 ~]# ip a s eth0 |grep -w inet  | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' |head -1
10.0.0.4
```bash


## 取出文件中的身份证号码
```bash

[root@lb03 ~]# grep -Ew '[0-9]{17}[0-9X]'  id.txt
邹 371481199403259478
莫 52020319810613433X
荣 530124197504135438
阮 360702197902169951