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把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行。
注意:
- 如果是搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名;
- 如果搜索单个文件,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
版权归原作者 风一样的美狼子 所有, 如有侵权,请联系我们删除。