linux三剑客——grep

简介

Linux三剑客主打信息处理,三剑合璧,几乎能满足你所有的信息需求。其中,grep专攻查找,sed精通编辑,awk主打分隔提取。

grep

如果你问我linux最叼的命令是什么的话,我会说是grep (global regular expressions print),在任何命令或文件流之后加上grep,面对密密麻麻的输出,它能帮你找到你想要的结果。

命令详解

--help: 命令提示

-c:仅列出文件中包含模式("文本或者正则")的行数,即匹配到的总行数。

# 示例一 对文件进行搜索 grep -c "key" file
[root czx]# cat clean.log 
[20230620-082401]: less than 50%, do nathing
[20230620-08:26:01]: less than 50%, do nathing
[20230620-08:27:01]: less than 50%, do nathing
[20230621-03:00:01]: less than 50%, do nathing
[20230624-11:00:01]: less than 50%, do nathing
[20230701-11:00:01]: less than 50%, do nathing
[20230708-03:00:01]: less than 50%, do nathing
[root@prod-pve-packet-gitlab-runner-001 czx]# grep -c less clean.log 
7

#示例二 对管道流进行搜索 cat clean.log | grep -c "key"
"key"
[root czx] # cat clean.log | grep -c less
7

-i:忽略模式中的字母大小写。

# 示例一 搜索文件中包含Less的关键字有几行
[root czx]# cat clean.log 
[20230620-082401]: less than 50%, do nathing
[20230620-08:26:01]: less than 50%, do nathing
[20230620-08:27:01]: less than 50%, do nathing
[20230621-03:00:01]: less than 50%, do nathing
[20230624-11:00:01]: less than 50%, do nathing
[20230701-11:00:01]: less than 50%, do nathing
[20230708-03:00:01]: less than 50%, do nathing
[root@prod-pve-packet-gitlab-runner-001 czx]# cat clean.log | grep -c Less
0

# *示例二 搜索文件中包含Less的关键字有几行 忽略大小写
[root@prod-pve-packet-gitlab-runner-001 czx]# cat clean.log | grep -ci Less
7

-l:列出带有匹配行的文件名。

# 示例一 递归搜索当前文件夹中包含less关键字的文件
[root czx]# grep -lr less *
clean.log
clean.sh

# 示例二 搜索clean.log、clean.sh文件中包含less的关键字
[root czx]# grep -l less clean.sh clean.log 
clean.sh
clean.log

-n:在每一行的最前面列出行号。

# 示例一 搜索clean.log文件中包含less的关键字,并显示行号
[root czx]# grep -n less clean.log 
1:[20230620-082401]: less than 50%, do nathing
2:[20230620-08:26:01]: less than 50%, do nathing
3:[20230620-08:27:01]: less than 50%, do nathing
4:[20230621-03:00:01]: less than 50%, do nathing
5:[20230624-11:00:01]: less than 50%, do nathing
6:[20230701-11:00:01]: less than 50%, do nathing
7:[20230708-03:00:01]: less than 50%, do nathing

-v:列出没有匹配模式的行。

# 示例一 搜索clean.log文件中不包含Less的关键字,并显示行号
[root czx]# grep -nv less clean.log 
1:[20230620-082401]: less than 50%, do nathing
2:[20230620-08:26:01]: less than 50%, do nathing
3:[20230620-08:27:01]: less than 50%, do nathing
4:[20230621-03:00:01]: less than 50%, do nathing
5:[20230624-11:00:01]: less than 50%, do nathing
6:[20230701-11:00:01]: less than 50%, do nathing
7:[20230708-03:00:01]: less than 50%, do nathing

-w:匹配整个单词,如果是字符串中包含这个单词,则不匹配。

# 示例一 搜索clean.log文件中的less单词,包含less的单词不做匹配
[root czx]# grep -wnless clean.log 
[20230620-082401]: less than 50%, do nathing
[20230620-08:26:01]: less than 50%, do nathing
[20230620-08:27:01]: less than 50%, do nathing
[20230621-03:00:01]: less than 50%, do nathing
[20230624-11:00:01]: less than 50%, do nathing
[20230701-11:00:01]: less than 50%, do nathing
[20230708-03:00:01]: less than 50%, do nathing

-o:只显示匹配到的字符串,每个匹配到的字符串单独显示一行。

# 示例一 搜索clean.log文件中的less,不包含不匹配的字符串
[root czx]# grep -wnless clean.log 
less
less
less
less
less
less
less

--color=[auto、always、never]:表示对匹配到的文本着色显示控制。

正则表达式

当然,grep也支持正则表达式的搜索

正则表达式的通配符如下:

*: 将匹配0个或者多个字符。 . :将匹配任何一个字符,且只能是一个字符。 [xyz] :匹配方括号中的任意一个字符。 [^xyz]:匹配方括号中的任意一个字符。 ^ : 锁定行的开头。 $ :锁定行的结尾。 ? :匹配前面的子表达式0次或者1次。 +:匹配前面的子表达式1次或者多次。 | : 匹配于|符号前或后的正则表达式。 {n,m} :最少匹配n次,最多匹配m次和BRE的区别是不需要加\。

awk

逐行读取文件内容,以你想要的格式进行数据处理。常用于快速读取各种配置文件。