0%

Linux之grep命令

grep是Linux中常用的文本搜索命令。它用于搜索文件中匹配指定模式的行

abstract.png

命令格式

其可用于搜索文件里符合条件的文本,并匹配的行进行打印输出。该命令的形式如下

1
grep [options] pattern [file]

高频用法

正向匹配

1
2
3
4
5
# 匹配a.txt文件中包含thr的行
grep thr a.txt

# 匹配a.txt文件中包含o的行
grep o a.txt

figure 1.png

当有多个匹配模式时,使用 -e 选项依次指定。显然各模式之间的逻辑关系是

1
2
3
4
5
6
7
8
# 搜索a.txt文件中包含thr的行
grep -e thr a.txt

# 搜索a.txt文件中包含ive的行
grep -e ive a.txt

# 搜索a.txt文件中 包含thr 或 包含ive 的行
grep -e thr -e ive a.txt

figure 2.png

此外,添加 -n 选项后,可以在搜索结果中展示相应的行号

1
2
# 搜索a.txt文件中包含o的行,并输出行号
grep -n o a.txt

figure 3.png

反向匹配

通过 -v 选项即可实现反向匹配。即输出不匹配指定模式的行

1
2
3
4
5
# 匹配a.txt文件中不包含thr的行
grep -v thr a.txt

# 匹配a.txt文件中不包含o的行
grep -v o a.txt

figure 4.png

支持正则表达式

grep之所以提供了强大的搜索功能,正是基于正则表达式的原因。可利用 -E 选项指定正则表达式

1
2
# 搜索a.txt文件,正则表达式为 o[un]
grep -E "o[un]" a.txt

figure 5.png

统计搜索结果数目

使用 -c 选项即可统计搜索结果的数目

1
2
3
4
5
# 统计 grep o a.txt 命令搜索结果的数目信息
grep -c o a.txt

# 统计 grep -v o a.txt 命令搜索结果的数目信息
grep -cv o a.txt

figure 6.png

查看匹配行的上下文

常用于查看日志中多行的堆栈信息

1
2
3
4
5
6
7
8
9
10
11
# 查看匹配行及相应的后面num行
-A [num]
--after-context=[num]

# 查看匹配行及相应的前面num行
-B num
--before-context=[num]

# 查看匹配行及相应的前面、后面各num行
-C [num]
--context=[num]

figure 7.png

处理二进制文件

通常grep命令不会将日志文件视作二进制文件。但当日志文件中包含特殊字符数据时,grep可能会判定错误,将其视作为二进制文件。在这种情况下,可以使用 -a选项。这样即使文件包含二进制数据,grep 也会尝试以文本方式处理它们,而不是将它们视为二进制文件。以便搜索、匹配

参考文献

  1. Linux命令行与shell脚本编程大全·第4版 Richard Blum、Christine Bresnahan著
请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝