grep(上中下)
grep [-cinvABC] 'word' 文件名 (过滤指定关键词)
-c 行数
-i 不区分大小写
-n 显示行号
-v 取反
-r 遍历所有子目录
-A 后面跟数字,过滤出符合要求的行以及下面n行
-B 同上,过滤出符合要求的行以及上面n行
-C 同上,同时过滤出符合要求的行以及上下各n行
[root@test ~]# which grep (关键词表红,centos6及之前版本是不加--color=auto,无颜色)
alias grep='grep --color=auto'
/usr/bin/grep
[root@test ~]# grep 'nologin' passwd
[root@test ~]# grep -c 'nologin' passwd 行数
8
[root@test ~]# grep -n 'nologin' 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
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
11:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
12:chrony:x:997:995::/var/lib/chrony:/sbin/nologin
[root@test ~]# grep -ni 'nologin' 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
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
11:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/noloGiN
12:chrony:x:997:995::/var/lib/chrony:/sbin/noLogin
[root@test ~]# grep -vni 'nologin' passwd 取反,不是nologin行提取出来
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
13:dhaskdhkashdkasaaaa22222222222
14:342432423432dsfsdfsdfsd
15:432432.txt
16:321321432.txt
17:$sdfdsfd
18:32131231
19:22233333333
20:22221111
21:222aaaaaaaaa
22:<
23:>
24:{
25:?
26:]
27:
[root@test ~]# grep -r 'root' /root/ 子目录及孙目录下面的文件遍历一遍
[root@test ~]# grep -r 'root' /etc/ > /tmp/grep.log
[root@test ~]# grep passwd !$
grep passwd /tmp/grep.log
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/passwd-:root:x:0:0:root:/root:/bin/bash
/etc/passwd-:operator:x:11:0:operator:/root:/sbin/nologin
/etc/postfix/main.cf:# the system passwd file in the chroot jail is just not practical.
[root@test ~]# grep -nA2 'root' passwd 过滤出符合要求的行以及下面n行
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/NOLOGIN
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@test ~]# grep -nB2 'spool' passwd 过滤出符合要求的行以及上面n行
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
--
7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8-halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@test ~]# grep -nC2 'mail' passwd 同时过滤出符合要求的行以及上下各n行
7-shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8-halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10-postfix:x:89:89::/var/spool/postfix:/sbin/nologin
11-sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/noloGiN
grep/egrep示例
grep -n 'root' /etc/passwd
grep -nv 'nologin' /etc/passwd
grep '[0-9]'/etc/inittab
grep -v '[0-9]'/etc/inittab
grep -v '^#' /etc/inittab
grep -v '^#' /etc/inittab|grep -v '^$'
grep '^[^a-zA-Z]' test.txt
grep 'r.o' test.txt grep 'oo*' test.txt
grep '.*' test.txt
grep 'o\{2\}' /etc/passwd
egrep 'o{2}' /etc/passwd
egrep 'o+' /etc/passwd
egrep 'oo?' /etc/passwd
egrep 'root|nologin' /etc/passwd
egrep '(oo){2}' /etc/passwd
正则表达式:
[ ]方括号里面任意一个字符
[root@test ~]# grep '[0-9]' passwd (0-9范围,只要数字就能过滤出来)
非数字的行过滤出来
[root@test ~]# grep -v '[0-9]' passwd
$sdfdsfd
<
>
{
?
]
^以什么字符开头的行
[root@test ~]# grep -n '^#' passwd
3:#daemon:x:2:2:daemon:/sbin:/sbin/nologin
6:#sync:x:5:0:sync:/sbin:/bin/sync
10:#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
20:#22221111
取反非以什么字符开头的行
[root@test ~]# grep -nv '^#' passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/NOLOGIN
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/Nologin
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/noloGiN
12:chrony:x:997:995::/var/lib/chrony:/sbin/noLogin
13:dhaskdhkashdkasaaaa22222222222
14:342432423432dsfsdfsdfsd
15:432432.txt
16:321321432.txt
17:$sdfdsfd
18:32131231
19:22233333333
21:222aaaaaaaaa
22:<
23:>
24:{
25:?
26:]
27:
[root@test ~]# grep -nv '^#' /etc/sos.conf
1:[plugins]
2:
4:
5:[tunables]
6:
9:
[^ ]非0-9,不是数字任何一个字符就能符合条件
[root@test ~]# grep '[^0-9]' passwd
^[^ ] 以一个非数字的字符开头的行
[root@test ~]# grep '^[^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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/noloGiN
chrony:x:997:995::/var/lib/chrony:/sbin/noLogin
dhaskdhkashdkasaaaa22222222222
$sdfdsfd
#22221111
<
>
{
?
]
[root@test ~]# grep -nv '^[^0-9]' passwd
14:342432423432dsfsdfsdfsd
15:432432.txt
16:321321432.txt
18:32131231
19:22233333333
21:222aaaaaaaaa
27:
非大小写字母开头的行
[root@test ~]# grep -n '^[^a-zA-Z]' passwd
3:#daemon:x:2:2:daemon:/sbin:/sbin/nologin
6:#sync:x:5:0:sync:/sbin:/bin/sync
10:#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
14:342432423432dsfsdfsdfsd
15:432432.txt
16:321321432.txt
17:$sdfdsfd
18:32131231
19:22233333333
20:#22221111
21:222aaaaaaaaa
22:<
23:>
24:{
25:?
26:]
.点表示任意的一个字符
[root@test ~]# grep -n 'r.o' passwd
1:root:x:0:0:root:/root:/bin/bash
15:rooooooooooooooooooot
17:rao
*星号 星号左边的字符重复零到n次
[root@test ~]# grep -n 'ro*o' passwd
1:root:x:0:0:root:/root:/bin/bash
12:chrony:x:997:995::/var/lib/chrony:/sbin/noLogin
15:rooooooooooooooooooot
16:roat
[root@test ~]# grep -n 'o*o' passwd
1:root:x:0:0:root:/root:/bin/bash
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
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
11:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/noloGiN
12:chrony:x:997:995::/var/lib/chrony:/sbin/noLogin
15:rooooooooooooooooooot
16:roat
17:rao
18:r???o
.* 零个至任意一个字符匹配
[root@test ~]# grep -n '.*' passwd
匹配行
[root@test ~]# grep -n 'sshd.*noloGiN' passwd
11:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/noloGiN
字符{数字} 表示字符出现几次
[root@test ~]# grep -n 'o\{2\}' passwd
1:root:x:0:0:root:/root:/bin/bash
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/Nologin
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
15:rooooooooooooooooooot (oo出现的组合,分别去匹配)
表示字符的出现范围o oo ooo 或者没有
[root@test ~]# grep -n 'o\{0,3\}' passwd
不用脱义符号
[root@test ~]# grep -En 'o{2}' passwd
[root@test ~]# grep -En '(oo){2}' passwd
grep -E等于egrep 不需要脱义符号
+ 表示加号前面的字符一次或者多次
[root@test ~]# egrep 'o+o' passwd
[root@test ~]# egrep 'o+a' passwd
?表示问号前面的字符零次或者一次
[root@test ~]# egrep 'o?o' passwd
[root@test ~]# egrep 'o?lo' passwd
|表示或者的意思
[root@test ~]# egrep 'root|nologin' passwd
[root@test ~]# egrep 'root|nologin|14' passwd
[root@test ~]# egrep -ni 'root|nologin|14' passwd 不区分大小写