grep


选项 作用
-o 只显示过滤内容
-n 只显示过滤内容
-v 取反
-A(n) 显示关键字往后N行
-B(n) 显示关键字往前N行
-C(n) 现在关键字前后N行
-w 匹配关键字 精确匹配
-i 忽略大小写
-c 统计行数
-q 静默输出
-l 显示过滤所在文件名
-L 对比关键字不在哪个文件中
-h 过滤多个文件 只显示文件内容不显示文件名
-f 只显示两个文件相同的部分
-F 带关键字的内容列表形式展开
-m(n) 限制grep检索行数的输出
-r 对文件进行递归检索
-x 对行进行精准过滤

零宽断言

## 零宽断言
[root@web02 ~]# ifconfig eth0|grep -Po '[1-9][0-9]*\.\d+\.\d+\.\d+(?= netmask)'
[root@web02 ~]# uptime|grep -Po '\d+(?= user)

-o

-o # 只显示过滤内容
[root@m01 ~]# grep -o xxx /etc/passwd
xxx
xxx

-n

-n # 显示过滤内容在文本中的行号
grep -n 'xxx' /etc/passwd
26:xxx:x:1000:1000::/home/xxx:/bin/bash

-v

-v # 取反
[root@m01 ~]# grep -v xxx /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

-A

-A # 显示关键字往后N行
[root@m01 ~]#
[root@m01 ~]# grep -A2 ftp /etc/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

-B

-B # 显示关键字往前N行
[root@m01 ~]# grep -B2 ftp /etc/passwd
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

-C

-C # 现在关键字前后N行
[root@m01 ~]# grep -C2 ftp /etc/passwd
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
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

-w

-w # 匹配关键字 精确匹配
[root@m01 ~]# cat 1.txt | grep xx
xx
xxx
xxxx
[root@m01 ~]# cat 1.txt | grep -w xx
xx

-i

-i # 忽略大小写
[root@m01 ~]# cat 1.txt | grep -wi XXXX
xxxx
XXXX

-c

-c # 统计行数
[root@m01 ~]# cat 1.txt | grep -wi XXXX
xxxx
XXXX
[root@m01 ~]# cat 1.txt | grep -wic XXXX
2

-q

-q # 静默输出
[root@m01 ~]# cat 1.txt | grep -wic XXXX
2
[root@m01 ~]# cat 1.txt | grep -wicq XXXX

-l

[root@m01 ~]# grep -l x 1.txt 2.txt
1.txt

-L

-L # 对比关键字不在哪个文件中
[root@m01 ~]# grep -L x 1.txt 2.txt
2.txt

-h

-h 只显示文件内容
grep -h .* 1.txt 2.txt 

-f

-f 只显示文件相同的部分
[root@m01 ~]# cat 1.txt 2.txt
x
xx
xxx
xxxx
XXXX
y
yy
yyy
yyyy
YYYY
xxx
xxxx
[root@m01 ~]# grep -f 1.txt 2.txt
xxx
xxxx

-F

-F 带关键字的内容列表形式展开
grep -F x 1.txt 2.txt
1.txt:x
1.txt:xx
1.txt:xxx
1.txt:xxxx
2.txt:xxx
2.txt:xxxx

-m 限制grep的输出

-m 限制grep的输出
[root@m01 ~]# grep x 1.txt
x
xx
xxx
xxxx
[root@m01 ~]# grep -m1 x 1.txt
x
[root@m01 ~]# grep -m2 x 1.txt
x
xx

-r

-r # 递归检索
[root@m01 web]# tree
.
├── css
│ └── style.css
├── image
├── index.html
└── js
└── main.js
# -r 例子
grep -r 'www.xxxxx.com' .
./css/style.css:www.xxxxx.com
./index.html:www.xxxxx.com
grep -rl 'www.xxxxx.com' .
./css/style.css
./index.html

-x

-x # 匹配完整的行关键字
grep -x 'root:x:0:0:root:/root:/bin/bash' /etc/passwd

-E

-E # 支持正则表达式
grep -E 'root|xxx' /etc/passwd