Linux 【杂谈】grep指令

前言:

在前面的基础指令部分,我们学习到了关于grep指令的基础用法,恰好最近有经常使用grep的需求,不得不对grep指令进行更多的了解,索性专门写一篇博客以作记录,也做分享。


目录 

前言:

一、grep基础

1. 基础搜索选项

演示:

2. 输出控制选项

演示: 

3. 文件与目录选项

 演示:

5. 上下文控制选项

 演示:

6. 其他实用选项

 演示:

二、正则表达式 

1.概念

2. 基本组成部分

(1)普通字符

   演示:

(2)元字符(特殊符号)

 演示:

总结: 



一、grep基础

grep: 是 linux 系统中的一个强大的文本搜索工具,可以按照 正则表达式 搜索文本,并把匹配到的行打印出来(匹配到的内容标红)。

  • 语法:grep   [选项]   【模式】 [文件]
  • 作用
  • 返回值:
  1. 如果模板搜索成功,则返回 0 状态码;
  2. 如果搜索不成功,则返回 1 状态码;
  3. 如果搜索的文件不存在,则返回2 的状态码。
  • 常用选项:
  • 1. 基础搜索选项

选项英文全称中文翻译作用
-i--ignore-case忽略大小写匹配时不区分大小写
-v--invert-match反向匹配显示不匹配的行
-w--word-regexp单词匹配只匹配完整单词
-x--line-regexp整行匹配

仅匹配整行内容

现在我已经创建了一个一万行的文件,接下来我会对该文件进行操作来演示。

演示:

1)-i

2) -v

3)-w

4)-x 

2. 输出控制选项

选项英文全称中文翻译作用
-n--line-number显示行号输出匹配行的行号
-c--count统计匹配数仅显示匹配行的总数
-o--only-matching仅输出匹配部分只显示匹配的文本(非整行)
-q--quiet静默模式不输出结果(用于脚本判断)

演示: 

1)-n

2)  -c

这个选项可以快速得出,匹配行数的大小

3)-o

 4)-q

这个选项较为特殊,使用它的场景一般是对文件快速判断,某个内容是否存在,但是不关心它的存在形式与数量。

  • 启用-q后,grep会完全禁止输出匹配结果(既不显示匹配的行,也不显示文件名)。

  • 通常用于脚本中,只关心是否匹配成功(通过退出状态码判断),而不需要显示内容。

在这个例子当中,我们看到返回值为1,这证明没有搜索成功(因为我们的选项当中不带有“-i”,没存在大小写检查)。

3. 文件与目录选项

选项英文全称中文翻译作用
-r--recursive递归搜索搜索目录及其子目录
-R--dereference-recursive递归搜索(跟随符号链接)-r,但跟踪符号链接
-l--files-with-matches列出匹配文件名仅显示包含匹配项的文件名
-L--files-without-match列出不匹配文件名显示匹配项的文件名

 演示:

1)-r

2) -R【它与“-r”选项的区别在于,它会跳转到一个链接实际指向的文件当中进行搜索】

该选项不好演示,这里就无法给大家演示。

3) -l

4)-L

大家可能会好奇4去哪里呢,其实4的选项都是关于正则表达式模式的选项,而正则表达式模式在下面会有专门的介绍,所以这里就不在赘述了。

5. 上下文控制选项

选项英文全称中文翻译作用
-A NUM--after-context=NUM显示匹配行后NUM行输出匹配行及其后若干行
-B NUM--before-context=NUM显示匹配行前NUM行输出匹配行及其前若干行
-C NUM--context=NUM显示匹配行前后NUM行同时输出前后若干行

 演示:

1)-A  【数字】

3)-B  【数字】

3)-C  【数字】

6. 其他实用选项

选项英文全称中文翻译作用
--color--color=auto高亮匹配文本匹配内容的文件着色显示
-H--with-filename显示文件名输出时包含文件名(默认多文件时启用)
-h--no-filename隐藏文件名输出时省略文件名
-s--no-messages忽略错误信息不显示文件不存在等错误

 演示:

1)--color

剩下的选项的使用是一样,这里就不再过多的演示了。 


二、正则表达式 

1.概念

正则表达式(简称 regex 或 regexp)是一种用于 匹配、查找、替换文本 的强大工具。它通过定义一种 模式(pattern),可以在字符串中快速搜索符合特定规则的文本片段。而我们上面介绍的grep就是基于它开发形成的。

2. 基本组成部分

正则表达式由 普通字符(如 a1#)和 元字符(特殊符号,如 .*^)组成。

(1)普通字符

  直接匹配字面值,例如:

  • cat 匹配字符串 "cat"

  • 123 匹配字符串 "123"

   演示:

(2)元字符(特殊符号)

元字符作用示例
.匹配任意单个字符(除换行符 \na.c 匹配 abcaXc
^匹配行首^hello 匹配以 hello 开头的行
$匹配行尾end$ 匹配以 end 结尾的行
*前一个字符出现 0 次或多次a*b 匹配 babaab
+前一个字符出现 1 次或多次a+b 匹配 abaab(不匹配 b
?前一个字符出现 0 次或 1 次a?b 匹配 b 或 ab
||逻辑,匹配多个模式之一cat | dog匹配catdog`
[]匹配括号内的任意一个字符[aeiou] 匹配任意元音字母
[^]匹配不在括号内的字符[^0-9] 匹配非数字字符
()分组,用于组合多个字符(ab)+ 匹配 ababab
{}指定前一个字符的重复次数a{2,4} 匹配 aaaaaaaaa
\转义字符,使元字符变为普通字符\. 匹配字面的 .

 演示:

1).

2)^

3)$

 4)*

这里之所以把不含有9的行打印处理是因为 *可以匹配成0个9,所以操作系统将所有的行都打印出来了。

5)+

5)?

后面的元字符的使用没有啥区别,这里就不再赘述了。 

注:

有一些元符号,除了可以作为字符串的一部分,同时也有特殊的含义。

这类符号可以进一步分为两类。

第一类:^ $ . [ ] * \
在 grep 命令中,默认为特殊含义,若要作为字符串的一部分,则需要在前面加上反斜杠 \ 。

第二类:( ) | ? + { }
在grep命令中,默认为字符串,若要使用其特殊含义,则用 grep -E 。


总结: 

正则表达式+grep就像文本处理的“魔法咒语”,它能让你用简单的符号组合高效完成搜索、匹配和替换任务。无论是从日志中提取关键信息,还是验证数据格式,掌握这些元字符(比如 ^ 匹配行首、. 匹配任意字符、* 匹配重复模式)都能事半功倍。那我们下期见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值