Linux-grep命令详解

2023-04-27 22:17:11 740

一、grep介绍

全拼:Global search REgular expression and Print out the line.

作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行.

模式:由正则表达式的元字符及文本字符所编写出的过滤条件﹔

语法:

grep  [options]  [pattern]   file

命令   参数      匹配模式  文件数据

grep命令里的匹配模式就是你想要找的东西,可以是普通的文字符号,也可以是正则表达式

常见参数:

-i: ignorecase,忽略字符的大小写

-v: 显示不能被模式匹配到的行

-E: 支持使用扩展的正则表达式元字符(egrep)

-n:显示匹配行的行号

-r:递归查找子目录中的文件

-l:只打印匹配的文件名

-c:只打印匹配的行数

-H: 在显示符合样式的那一行之前,表示该行所属的文件名称

-s:无声操作只显示报错,检查退出状态

-e:使用正则表达式

-w:精确匹配

-wc:精确匹配次数

-o:查询所有匹配字段

-A3:打印匹配行和下三行

-B3:打印匹配行和上三行

-C3:打印匹配行和上下三行

二、grep实践

先看一下这个测试文件的内容吧

image.png

2.1、输出以r开头的行(不区分大小写)

image.png

: 这里的-i代表不区分大小写, -n代表显示匹配行和行号

2.2、输出以.结尾的行
image.png

: 因为.在这里有着特殊含义, 所以要用\转义一下, 如果不加转义字符的话, grep就会把它当做正则表达式来处理(.代表的含义是匹配任意一个字符)

2.3、$符号

Linux系统中, 所有文件的结尾都有一个$符

可以利用cat -A 查看文件

image.png

2.4、^$(代表空行的意思)组合符

找出文件的空行, 以及行号

image.png

2.5、.点符号

"."点表示任意一个字符, 有且只有一个, 不包含空行
image.png

2.6、*符号

"*"表示找出前一个字符0次或一次以上

找出文件中r出现0次或多次的行和行号

image.png

2.7、.*组合符

".*"表示所有内容, 包括空行

image.png

2.8、^.*t符 (含义: 以任意内容开头, 直到t结束)

image.png

2.9、[abc]中括号

中括号表达式,[abc]表示匹配中括号中任意一个字符, a或b或c,常见的形式如下;

[a-z]匹配所有小写单个字母[A-Z]匹配所有单个大写字母

[a-zA-Z]匹配所有的单个大小写字母

[0-9]匹配所有单个数字

[a-zA-ZO-9]匹配所有数字和字母

匹配rt字符中的任意一个,得到它的行数和行号

image.png

2.10、[^abc]中括号中去反

[^abc]或[^a-c]这样的命令, "^"符号在中括号中第一位表示排除, 就是排除字符a,b,c

: 出现再中括号里的尖角号表示取反

image.png

三、扩展正则grep实践

使用grep -E进行实践扩展正则, egrep官网已经弃用了

3.1、+号

+号表示匹配前一个字符1一次或多次,必须使用grep-E扩展正则

image.png

3.2、?符

匹配前一个字符0次或1次

找出文件中包含rt或者rot的行

image.png

3.3、|符

竖线|再正则中是或者的意思

找出端口号为80的进程名


image.png

3.4、()小括号

将一个或多个字符捆绑在一起, 当作一个整体进行处理

image.png

3.5、{n,m}匹配次数

{n,m}:匹配前一个字符至少n次, 最多m次

{n,}: 匹配前一个字符至少n次, 没有上限

{,m}: 匹配前一个字符最多m次,可以没有

重复前一个字符各种次数, 可以通过-o参数显示明确的匹配过程
image.png


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: