grep作为linux管理中常用的三大工具之一(grep、awk、sed),其功能十分强大,因此难以对其进行全面的使用介绍,因此本文只作为个人学习的笔记之用。

grep的用处:

在文本中匹配要查询的字符串,该字符串支持通配符和正则表达式,并且在文本中进行查找的时候是以行为单位的。给一个简单的用法:查询/etc/passwd文件中root字符串。

现有待查询的文本:

例子1:

grep 'from'  -i -r -n

'from' 为需要查询的字符串;

-i       为在查询匹配时不区分字符串的大小写;

-r      为在查询时对指定的目录进行迭代查询(就是说会遍历目录下面的所有子目录中的文件),这里我们默认目录为当前路径‘.’ ;

-n     为返回查询结果时标注出匹配的字符串所在行的行号;

例子2:

-E 的使用。
扩展正则表达式。
使用-E时可以在查询时进行多个字符串的“或”条件的匹配。

grep -E 'import|from'  -i -r -n

这里匹配的是‘import’或‘from’,一行中字符串只要匹配这两个中的一个即可。

例子3: (和第二个例子很相似)

-e 的使用。
使用多字符串匹配。
使用-e时可以在查询时进行多个字符串的“或”条件的匹配。

grep -e 'import' -e 'from'  -i -r -n

这里匹配的是‘import’或‘from’,一行中字符串只要匹配这两个中的一个即可。

例子4:

-m 的使用。
使用-m时在其后面需要加数字,表示为每个文件最多可以匹配的行数。
grep -m 1 -e 'import' -e 'from'  -i -r -n

第4个例子可以和第3个、第二个例子比较来看,可以看到,每个文本中只匹配了一行。

例子5:

-w 的使用。
表示为待匹配的字符串应以独立形式存在,比如xxx import yyyy中的import就是独立存在,fun(import)和__import__就不是独立存在。
grep  -w 'import'   -i -r -n
 

如果不加-w,则是:

 

 
 
 

例子6:

通配符和正则的使用:
  • 1 . 表示 任意一个字符
  • 2 * 表示 零个或多个前面的字符
  • 3 .* 表示0个或1个或多个任意字符,空行也包含在内
  • 4 ? 表示0个或者1个前面的字符,使用的时候要\ 转义一下
  • 5 + 表示一个或者多个+前面的字符
  • 6 | 在正则表达式里面表示或者,能够写多个,是特殊符号,要使用转义 或者-E 或者 egrep
  • 7 () 括号表示一个总体,{1,3}大括号表示一个范围,“  ? +(){}  |   ” 都是特殊符号,要使用必须转义或者-E 或者egrep,“. 和 *”不需要转义。[ ]也不需要转义。
 
 
 
“.*”比较不好理解,不过这个匹配表示匹配所有情况,也就是说相当于打印出所有文本内容,相当于“*” ,不过在其前面加其他字符就可以表示某字符开头的所有情况,因此实际意义不大。
grep  's.*'   -i -r -n

 
grep  'impor*t'   -i -r -n
 

grep  'impo.t'   -i -r -n
 

 grep  's\{2\}'   -i -r -n
 

 
 grep  'impo\?rt'   -i -r -n
 

grep  '\(_\)\{2\}'   -i -r -n

egrep  '(_){2}'   -i -r -n

需要注意的是()是需要转义的,而[ ]是不需要转义的。

 
grep  'impor\+t'   -i -r -n

 
 
grep  'impo[a-zA-Z0-9]t'   -i -r -n
 

[ ]是不需要转义的,()是需要转义的。
 [ ]表示的是单一字符的匹配范围,()表示的是1个或多个字符的匹配范围。

a-z    表示所有小写英文字母;
A-Z   表示所有大写英文字母;
0-9   表示所有数字。

 
 
如果字符^在[ ]之中则表示取反,例子:
grep  'impo[a-z]t'   -i -r -n
grep  'impo[^a-z]t'   -i -r -n

匹配字符中^代表行首,$代表行尾,"^s"代表位于行首的为"s"的字符,"s$"代表位于行尾的为"s"的字符,例子:
grep  '^i'  -i -r -n
grep  'b$'   -i -r -n
 

 grep  '^i.*s$'   -i -r -n
 

其中,“.*”表示任意长度的任意字符串。

 
 
 
{ } 指定重复的字符或字符串个数:
grep  's\{2\}'   -i -r -n 

等价于:

grep  '\(ss\)\{1\}'   -i -r -n

等价于:

grep  'ss'   -i -r -n

{ } 中可以指定多个重复的数值:

grep  's\{1,2\}'   -i -r -n 

 
grep  'imp\(or\|ro\)t'   -i -r -n
 

可以在特殊字符“( )”的中间嵌套其他特殊字符。

 
 
 
--include 在遍历目录时指定只包含的文件;
--exclude 在遍历目录时指定不包含的文件;
grep  'import'   -i -r -n --include main.py
grep  'import'   -i -r -n --exclude main.py

 
 
只匹配空行,“^$” 。
grep  '^$'   -i -r -n

 
 
 
=============================================

grep -E 等价于egrep,相当于对需要转义的字符提前做了转义。

通配符和正则的使用。
  • 1 . 表示 任意一个字符
  • 2 * 表示 零个或多个前面的字符
  • 3 .* 表示0个或1个或多个任意字符,空行也包含在内
  • 4 ? 表示0个或者1个前面的字符,使用的时候要\ 转义一下
  • 5 + 表示一个或者多个+前面的字符
  • 6 | 在正则表达式里面表示或者,能够写多个,是特殊符号,要使用转义 或者-E 或者 egrep
  • 7 () 括号表示一个总体,{1,3}大括号表示一个范围,“  ? +(){}  |   ” 都是特殊符号,要使用必须转义或者-E 或者egrep,“. 和 *”不需要转义。[ ]也不需要转义。
  • grep -n 显示符号要求的行,并显示行号
  • grep -c 打印符合要求的行数
  • grep -v 打印不符合要求的行,取反的意思
  • grep -r 会把目录下的全部文件所有遍历;-r针对的是目录,若是不加-r只能针对文件
  • grep -i 忽略大小写
  • grep -A2 打印符合要求的行以及下面两行
  • grep -B2 打印符合要求的行以及上面两行
  • grep -C2 打印符合要求的行以及上下两行
  • grep -w 匹配一个完整的单词
  • grep -E 特殊符号脱意==egrep
  • centos7中自带 --color显示颜色 ;
  • grep 跟特殊符号的话,要用单引号
  • grep --include 包含
  • grep -l 只打印出含有匹配字符串的文件名,不输出具体匹配行的数据
============================================
 

参考:

http://www.noobyard.com/article/p-khsjayud-o.html

http://t.zoukankan.com/seaBiscuit0922-p-7744558.html

https://www.cnblogs.com/niguding/p/16573285.html

linux工具grep的使用心得笔记的更多相关文章

  1. Linux Shell脚本攻略 读书笔记

    Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...

  2. Linux正则表达式grep与egrep

    grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...

  3. Linux内存带宽的一些测试笔记

    Linux内存带宽的一些测试笔记 首页 所有文章 2014年10月 GNU/Linux系统  2014-10-21 13:20  GNU/LINUX系统 内存带宽 1k 字  669 次 最近要测一下 ...

  4. 由一条Linux的grep命令说起

    今天在开发的时候,看到同事使用了这样的一条linux命令 grep 'class YourClass' -rwi * |grep -v svn 想到了 grep命令的,几个参数. -r 明确要求搜索子 ...

  5. Linux工具参考篇(网摘)

    Linux工具参考篇 原文出处:[Linux Tools Quick Tutorial] 1. gdb 调试利器 2. ldd 查看程序依赖库 3. lsof 一切皆文件 4. ps 进程查看器 5. ...

  6. 12个 Linux 中 grep 命令的超级用法实例

    12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一 ...

  7. Linux内存带宽的一些测试笔记【转】

    转自:https://blog.csdn.net/subfate/article/details/40343497 版权声明:本文为迟思堂主人李迟原创文章,版权所有.可随便任意使用(包括学习研究商用) ...

  8. linux中grep命令的使用

    转载:http://blog.csdn.net/universsky/article/details/8866402 linux中grep命令的使用 grep (global search regul ...

  9. Linux工具[转]

    ref: https://github.com/linw7/Skill-Tree/blob/master/Linux%E5%B7%A5%E5%85%B7.md Linux工具 Linux下还是有很多超 ...

  10. Linux三剑客grep、awk和sed

    grep,sed 和 awk是Linux/Unix 系统中常用的三个文本处理的命令行工具,称为文本处理三剑客.本文将简要介绍这三个命令并给出基本用法. 管道 在介绍这两个命令之前,有必要介绍一下Uni ...

随机推荐

  1. 解锁LLMs的“思考”能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展

    解锁LLMs的"思考"能力:Chain-of-Thought(CoT) 技术推动复杂推理的新发展 1.简介 Chain-of-Thought(CoT)是一种改进的Prompt技术, ...

  2. 字符串— trim()、trimStart() 和 trimEnd()

    在今天的教程中,我们将一起来学习JavaScript 字符串trim().trimStart() 和 trimEnd(). 01.trim() 学习如何使用 JavaScript  trim()方法从 ...

  3. 【Playwright+Python】系列教程(一)环境搭建及脚本录制

    前言 看到这个文章,有的同学会说: 六哥,你为啥不早早就写完python系列的文章. 因为有徒弟需要吧,如果你也想学自学,那这篇文章,可以说是我们结缘一起学习的开始吧! 如果对你有用,建议收藏和转发! ...

  4. Spring之webMvc异常处理

    异常处理可以前端处理,也可以后端处理. 从稳妥的角度出发,两边都应该进行处理. 本文专门阐述如何在服务端进行http请求异常处理. 一.常见的异常类型 当我们做http请求的时候,会有各种各样的可能错 ...

  5. Bike Sharing Analysis(一)- 探索数据

    1. Bike Sharing Analysis 在这章主要介绍如何分析共享单车服务数据,以及如何基于时间.天气状态特征来识别单车的使用模式.除此之外,我们还会引入可视化分析,假设检验.以及时间序列分 ...

  6. 3 - 【RocketMQ 系列】CentOS 7.6 安装部署RocketMQ

    四.安装管理面板 1.介质下载 下载到本地再上传,下载地址:https://github.com/apache/rocketmq-dashboard/archive/refs/tags/rocketm ...

  7. 转载 | [AcSaveAsType -cad版本代号对应数字 ] & [AutoCAD的DWG文件格式版本代号列表]

    1.  AcSaveAsType -cad版本代号对应数字 doc.SaveAs("D:\AutoCAD\1.dwg", 61) # 将当前文件另存为PyAutoCAD_SaveA ...

  8. redis雪崩

    每个key(即数据)如果设置了失效时间的话,如果大量key同时过期的时候,或者说因为某种原因redis中的数据突然大批量丢失,这些key又大量地去请求这些key时,因为redis里面没有这些数据,就会 ...

  9. Nginx使用upstream实现动静分离

    一.为什么要进行动静分离 分离资源,减少不必要到的请求消耗,减少请求延时. 注:我这里,是nginx处理静态资源,apache处理动态资源. 场景分析: 1.未分离之前的场景步骤 (1)客户端请求ur ...

  10. 2024 暑假友谊赛 1 (7.13)zhaosang

    A-A https://vjudge.net/contest/638765#problem/A 一开始贪心做不出来,后面发现是dp找到转移方程即可,01dp问题 代码如下 #include <b ...