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