grep命令详解

grep命令介绍

它是linux系统中常用的三大文本处理工具之一,grep与awk、sed被称为linux系统中的三剑客。
我们可以使用grep命令
他的命令格式是在文本中查找过滤出你所指定的字符串。他有点类似于网页和word等的CTRL+F键的快捷搜索。
.

使用格式

官方文档给的是:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
简单点说也就是:
grep [选项] '模式' 文件
.

常用选项:

-v      #取反,只显示未匹配的内容,未匹配的不显示
-i      #忽略大小写
-n      #显示过滤出内容在所在文件的行号
-c      #统计过滤出内容的行数
-w      #精准匹配,被匹配的文本只能是单词,而不能是单词中的某一部分
-o      #只显示被匹配的内容
-r      #递归过滤
-R      #递归过滤
-E      #支持扩展的正则表达式
-A      #显示过滤内容的前n行,after
-B      #显示过滤内容的后多少行,before
-C      #显示过滤内容上下的各n行,context

.

案例:

搜索含root字符串的行
[root@heibn ~]# grep  'root'  /etc/passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

.

搜索不含/sbin/nologin字符串的行
[root@hebin ~]# grep  -v  '/sbin/nologin'  /etc/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
test:x:1000:1000::/home/test:/bin/bash

.

忽略大小写
[root@heibn ~]# grep  -i  'root'  passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ROOT

.

给过滤内容显示行号
[root@heibn ~]# grep  -n  'root'  /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

.

统计过滤出内容的行数
[root@hebin ~]# grep -c 'root' /etc/passwd 
2

.

只显示root字符串
[root@hebin ~]# grep -o 'root' /etc/passwd
root
root
root
root

.

精准匹配,只过滤root这个单词
[root@hebin ~]# cat file.txt 
hebin
arooto/:ccsa
barootoes:rooto:/sbin/roots
root
[root@hebin ~]# grep -w 'root' file.txt 
root

.

递归过滤,当前目录下游目录的话,可以过滤该目录下的文件
[root@heibn ~]# grep  -r  'root'  ./*       #递归过滤
./data/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
./test/data.txt:root

[root@hebin ~]# grep  -R  'root'  ./*           #递归过滤
./data/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
./test/data.txt:root

.

扩展正则 | 表示或者 -E 支持扩展正则
[root@hebin ~]# grep -E  'root|adm'  /etc/passwd
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

[root@hebin ~]# egrep  'root|adm'  passwd 
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

.

关于匹配过滤的行向上及向下
[root@hebin ~]# grep -A1 'adm'  /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@hebin ~]# grep -B1 'adm'  /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

[root@hebin ~]# grep -C1 'adm'  /etc/passwd
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
点赞

发表回复