linux grep命令

linux grep命令

grep简介

grep 命令是 global regular expression print 的缩写,用于在文件、多个文件或输入流中进行正则匹配,它会匹配我们在命令行中指定的「文本模式」(Pattern),并将结果输出打印。

其功能是搜索文件内的内容,并打印出来

grep是一个强大的文本搜索工具。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

基本语法

grep [选项参数] 文本模式 文件名

常用参数

-a  #不要忽略二进制数据
-A  #除了显示符合范本样式的那一行之外,并显示该行之后的内容
-b  #在显示符合范本样式的那一行之外,并显示该行之前的内容
-B  #除了显示符合样式的那一行之外,并显示该行之前的内容
-c  #计算符合范本样式的列数
-C  #除了显示符合范本样式的那一列之外,并显示该列之前后的内容
-d  #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作
-e  #指定字符串作为查找文件内容的范本样式
-E  #将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式
-f  #指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
-F  #将范本样式视为固定字符串的列表
-G  #将范本样式视为普通的表示法来使用
-h  #在显示符合范本样式的那一列之前,不标示该列所属的文件名称
-H  #在显示符合范本样式的那一列之前,标示该列的文件名称
-i  #忽略字符大小写的差别
-l  #列出文件内容符合指定的范本样式的文件名称
-L  #列出文件内容不符合指定的范本样式的文件名称
-n  #在显示符合范本样式的那一列之前,标示出该列的编号
-q  #不显示任何信息
-R/-r #此参数的效果和指定“-d recurse”参数相同
-s  #不显示错误信息
-v  #反转查找
-V  #显示版本信息 
-w  #只显示全字符合的列
-x  #只显示全列符合的列
-y  #此参数效果跟“-i”相同
-o  #只输出文件中匹配到的部分

正则表达式

^  #匹配以XX开头的行
$  #匹配以XX结尾的行

与标准输入流联动

Linux 中的标准输入输出、重定向、管道符

基本写法:

command | grep pattern

这里,command 是生成输出的命令,pattern 是要搜索的模式,| 是管道符,可以将两个命令分隔开,|左边命令的输出就会作为 | 右边命令的输入

常用实例

现在我们在 /home/tian777 目录下,有一个名为 readme.txt 的文件,像搜索里面包含关键字 "beike" 的行,那么可以使用以下命令:

cd /home/tian777
grep "beike" readme.txt

或者搜索目录下含关键字的文件

grep -ir "beike"  /home/tian777

常用选项参数

  • -i:(ignore)忽略大小写进行匹配。
  • -n:(number)显示匹配行的行号。
  • -v:(reverse)反向匹配,打印不包含模式的行。
  • -r:(recursive)递归搜索指定目录及其子目录下的文件。
grep -n beike  readme.txt

1、比如在读取 show.txt 的时候搜索 goodbook

cat show.txt | grep goodbook

2、借助标准输入流快速定位错误

tail -2000f project-test.log | grep -i error

3、统计字段出现的次数。

grep -o [pattern] [finename...] | wc -l

选项 -o 只显示匹配的字符串,并以单独行输出。

wc -l 统计输入的行数。就可以知道这个要统计的字段出现的次数了。

假如有一个文件 book.txt 内容如下:

Hi my name is Bob.

如果想统计字母 m 出现的次数,那么用下面的命令可以实现。

grep -o "m" book.txt | wc -l

4、打印在 aa,bb,cc 文件中匹配 test 的行,并显示行号。

grep -n 'test' aa bb cc

参考资料

https://zhuanlan.zhihu.com/p/339521581

https://www.jianshu.com/p/4ff1d7f2e4bd

posted @ 2023-06-15 11:11  贝壳里的星海  阅读(131)  评论(0编辑  收藏  举报