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
posted @ 2019-11-18 20:51  干瘪的柠檬  阅读(270)  评论(0)    收藏  举报