Linux- 系统随你玩之--grep查找文件内容
创始人
2024-05-03 04:58:04

1、前言

我们在使用过程中经常需要对当前获取的文件进行过滤、提取和分析,以便快速查找到含有指定内容的文件或指定信息的那些行。本章我们继续深入了解有关文本检索的内容。

2、grep 查找文件内容

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。
grep全称是Global Regular Expression Print,表示全局正则表达式版本。

2.1、grep由来

grep 命令的由来可以追溯到 UNIX 诞生的早期,在 UNIX 系统中,搜索的模式(patterns)被称为正则表达式(regular expressions),为了要彻底搜索一个文件,有的用户在要搜索的字符串前加上前缀 global(全面的),一旦找到相匹配的内容,用户就像将其输出(print)到屏幕上,而将这一系列的操作整合到一起就是 global regular expressions print,而这也就是 grep 命令的全称。

2.2、特点

grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
同时也能在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子。

2.3、格式

grep 命令的基本格式如下:
[root@localhost ~]# grep [选项] 模式 文件名
说明:
这里的模式,要么是字符(串),要么是正则表达式。
grep 命令常用选项及含义

选项含义
-c仅列出文件中包含模式的行数。
-i忽略模式中的字母大小写。
-l列出带有匹配行的文件名。
-n在每一行的最前面列出行号。
-v列出没有匹配模式的行。
-w把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行。

注意:

  1. 如果是搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名;
  2. 如果搜索单个文件,grep 命令的结果将显示每一个包含匹配模式的行。

3、实操例子

我们现在针对已经学习过的Linux基础知识 -进行学习练习以检验学习效果。
1、假设文件fyydlz.txt的文本如下(可以利用touch命令和vi命令组合创建):

hello fyydlz world
wold hello
nothing is important
i like fyydlz fyydlz
hello world
wold hello
nothing is important
i like fyydlz fyydlz

grep 命令用来查找文本,这里是最常用的几个操作例子:

3.1、查找文件fyydlz.txt中含有"hello"字符串的行:

 grep hello fyydlz.txt

在这里插入图片描述

3.2、使用正则表达式查找文件fyydlz.txt中含有数字的行:

grep -E "\d." fyydlz.txt

在这里插入图片描述

3.3、查找文件fyydlz.txt中不包含"hello"字符串的行:

grep -v hello fyydlz.txt

在这里插入图片描述

3.4、查找文件fyydlz.txt中含有"fyydlz"字符串的行以及它前面的3行:

grep fyydlz -B 3 fyydlz.txt

在这里插入图片描述

3.5、查找文件fyydlz.txt中含有"fyydlz"字符串的行以及它后面的3行:

grep fyydlz -A 3 fyydlz.txt

在这里插入图片描述

3.6、查找文件fyydlz.txt中含有"4."字符串的行以及它前后3行:

grep 4. -C 3 fyydlz.txt

在这里插入图片描述

4、日常运维用法

1、我们在生产环境服务器上,经常使用到下面这个命令:

ps -ef | grep java或nginx

显然,此处 grep的作用就是帮助筛选出那些运行中的java或nginx进程。

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

grep "^h" fyydlz.txt -i -n

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

在这里插入图片描述

3、输出以.结尾的行

grep "\.$" fyydlz.txt -n

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

4、^$(代表空行的意思)组合符找出文件的空行, 以及行号

grep "^$" fyydlz.txt -n

在这里插入图片描述

5、.点符号
"."点表示任意一个字符, 有且只有一个, 不包含空行。

grep "." fyydlz.txt -n

在这里插入图片描述

6、*符号
"*"表示找出前一个字符0次或一次以上
找出文件中i出现0次或多次的行和行号。

grep "i*" fyydlz.txt -n

在这里插入图片描述

7、*.组合符
".*"表示所有内容, 包括空行。

grep ".*" fyydlz.txt -n

在这里插入图片描述

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

grep "^.*z" fyydlz.txt -n

在这里插入图片描述

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

  • [a-z]匹配所有小写单个字母[A-Z]匹配所有单个大写字母;
  • [a-zA-Z]匹配所有的单个大小写字母;
  • [0-9]匹配所有单个数字;
  • [a-zA-ZO-9]匹配所有数字和字母;
  • 匹配abc字符中的任意一个,得到它的行数和行号;
 grep "[abc]" fyydlz.txt -n

在这里插入图片描述

10、 grep 参数-o
使用"-o"参数选项, 可以显示被匹配到的关键字, 而不是将整行的内容都输出。

 grep "[abc]" fyydlz.txt -n -o

在这里插入图片描述

11、显示出文章中有多少行有a
grep “[abc]” fyydlz.txt -c
"-c"只统计匹配的行数
在这里插入图片描述

12、[^abc]中括号中去反
[abc]或[a-c]这样的命令, "^"符号在中括号中第一位表示排除, 就是排除字符a,b,c
注: 出现再中括号里的尖角号表示取反。

grep "[^abc]" fyydlz.txt -n

在这里插入图片描述
测试文件fyydlz.txt

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...