0


Linux- 系统随你玩之--grep查找文件内容

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 -B3 fyydlz.txt

在这里插入图片描述

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

grep fyydlz -A3 fyydlz.txt

在这里插入图片描述

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

grep4. -C3 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

标签: linux 运维 服务器

本文转载自: https://blog.csdn.net/fyydlz/article/details/128488963
版权归原作者 风一样的美狼子 所有, 如有侵权,请联系我们删除。

“Linux- 系统随你玩之--grep查找文件内容”的评论:

还没有评论