Grep
grep
[root@shell /server/scripts]# alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
7中的变量是系统自带 6中需要自己添加
1.通配符及特殊符号
* 所有
. 当前目录
.. 当前目录的上一级目录
- 当前目录的上一次所在位置
~ 家目录
# 注释,超级管理的命令行提示符
$ 引用变量及普通用户命令行提示符
? 匹配一个任意字符,必须是一个
! 非,取反
[] 匹配中括号中任意一个字符
{} 生成序列,整体
[^] 排除中括号中的所有字符
`` 先执行反引号里面的命令
$() 先执行括号里面的命令
; 前面的命令执行不管成功还是失败,后面的照常进行
&& 与,前面一条命令执行成功,才会执行后面的命令
|| 或,前面一条命令执行失败,才会执行后面的命令
| 管道
\ 转义,让一些有特殊含义的字符,取消特殊的含义
& 放到后台运行
2.正则
^ 开头
$ 结尾
. 匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“(.|\n)”的模式。
^$ 空行
* 匹配前面的字符出现0次或者0次以上
.* 所有
\ 取消特殊字符的含义
{n} 前面的字符匹配n次
{n,} 前面的字符至少匹配n次
{n,m} 前面的字符至少匹配n次,最多匹配m次,n<m
{,m} 前面的字符最多匹配m次
[] 匹配中括号中的任意一个字符
[^] 排除中括号中的任意字符
() 后向引用,匹配一个功能模块,整体
+ 前面的字符匹配一次或者1次以上
? 前面的字符匹配0次或者1次
| 或者
3.[[]]
还有很多,可以百度
[[:lower:]]
[[:upper:]]
[[:alpha:]]
[[:digit:]]
[[:alnum:]]
[[:punct:]]
[[:space:]]
#所有的小写字母
[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
4.参数
-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
统计行数,显示行数
[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
精确匹配,只显示内容
[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' ./* 目录下的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
向上向下匹配
[root@lb03 ~]# grep -n -A 2 'adm' passwd adm行向下两行
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
[root@lb03 ~]# grep -n -B 2 'adm' passwd adm行向上两行
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
[root@lb03 ~]# grep -n -C 2 'adm' passwd adm行向上向下两行
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
过滤任意一个字符,匹配所有
[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
5. | () [] 的使用
[root@lb03 ~]# grep '^r' passwd r开头
root:x:0:0:root:/root:/bin/bash
roott
[root@lb03 ~]# grep -E '^r|^l' passwd r或l开头
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
roott
[root@lb03 ~]# grep '^[rl]' passwd r或l开头
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 rl开头
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
...
案例:取出文件中的身份证号
[root@lb03 ~]# grep -Ew '[0-9]{17}[0-9X]' id.txt
邹 371481199403259478
莫 52020319810613433X
荣 530124197504135438
阮 360702197902169951
[root@shell /server/scripts]# cat sf.txt |grep -E '[0-9]{17}[0-9xX]'
邹 371481199403259478
莫 52020319810613433X
荣 530124197504135438
阮 360702197902169951
姜 370602198507189574
孟 7894561237894561230
[root@shell /server/scripts]# cat sf.txt |grep -Ew '[0-9]{17}[0-9X]'
邹 371481199403259478
莫 52020319810613433X
荣 530124197504135438
阮 360702197902169951
姜 370602198507189574

浙公网安备 33010602011771号