linux工具grep的使用心得笔记
grep作为linux管理中常用的三大工具之一(grep、awk、sed),其功能十分强大,因此难以对其进行全面的使用介绍,因此本文只作为个人学习的笔记之用。
grep的用处:
在文本中匹配要查询的字符串,该字符串支持通配符和正则表达式,并且在文本中进行查找的时候是以行为单位的。给一个简单的用法:查询/etc/passwd文件中root字符串。
现有待查询的文本:
例子1:
grep 'from' -i -r -n
'from' 为需要查询的字符串;
-i 为在查询匹配时不区分字符串的大小写;
-r 为在查询时对指定的目录进行迭代查询(就是说会遍历目录下面的所有子目录中的文件),这里我们默认目录为当前路径‘.’ ;
-n 为返回查询结果时标注出匹配的字符串所在行的行号;
例子2:
grep -E 'import|from' -i -r -n
这里匹配的是‘import’或‘from’,一行中字符串只要匹配这两个中的一个即可。
例子3: (和第二个例子很相似)
grep -e 'import' -e 'from' -i -r -n
这里匹配的是‘import’或‘from’,一行中字符串只要匹配这两个中的一个即可。
例子4:
第4个例子可以和第3个、第二个例子比较来看,可以看到,每个文本中只匹配了一行。
例子5:

如果不加-w,则是:

例子6:
- 1 . 表示 任意一个字符
- 2 * 表示 零个或多个前面的字符
- 3 .* 表示0个或1个或多个任意字符,空行也包含在内
- 4 ? 表示0个或者1个前面的字符,使用的时候要\ 转义一下
- 5 + 表示一个或者多个+前面的字符
- 6 | 在正则表达式里面表示或者,能够写多个,是特殊符号,要使用转义 或者-E 或者 egrep
- 7 () 括号表示一个总体,{1,3}大括号表示一个范围,“ ? +(){} | ” 都是特殊符号,要使用必须转义或者-E 或者egrep,“. 和 *”不需要转义。[ ]也不需要转义。





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 表示所有数字。

匹配字符中^代表行首,$代表行尾,"^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

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


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的使用心得笔记的更多相关文章
- Linux Shell脚本攻略 读书笔记
Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...
- Linux正则表达式grep与egrep
grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...
- Linux内存带宽的一些测试笔记
Linux内存带宽的一些测试笔记 首页 所有文章 2014年10月 GNU/Linux系统 2014-10-21 13:20 GNU/LINUX系统 内存带宽 1k 字 669 次 最近要测一下 ...
- 由一条Linux的grep命令说起
今天在开发的时候,看到同事使用了这样的一条linux命令 grep 'class YourClass' -rwi * |grep -v svn 想到了 grep命令的,几个参数. -r 明确要求搜索子 ...
- Linux工具参考篇(网摘)
Linux工具参考篇 原文出处:[Linux Tools Quick Tutorial] 1. gdb 调试利器 2. ldd 查看程序依赖库 3. lsof 一切皆文件 4. ps 进程查看器 5. ...
- 12个 Linux 中 grep 命令的超级用法实例
12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一 ...
- Linux内存带宽的一些测试笔记【转】
转自:https://blog.csdn.net/subfate/article/details/40343497 版权声明:本文为迟思堂主人李迟原创文章,版权所有.可随便任意使用(包括学习研究商用) ...
- linux中grep命令的使用
转载:http://blog.csdn.net/universsky/article/details/8866402 linux中grep命令的使用 grep (global search regul ...
- Linux工具[转]
ref: https://github.com/linw7/Skill-Tree/blob/master/Linux%E5%B7%A5%E5%85%B7.md Linux工具 Linux下还是有很多超 ...
- Linux三剑客grep、awk和sed
grep,sed 和 awk是Linux/Unix 系统中常用的三个文本处理的命令行工具,称为文本处理三剑客.本文将简要介绍这三个命令并给出基本用法. 管道 在介绍这两个命令之前,有必要介绍一下Uni ...
随机推荐
- rust程序设计(6)枚举与模式匹配
rust中的枚举有什么用?枚举可以嵌入类型的好处是什么 你可以在同一个枚举中既有单个值,也有元组或结构体. 枚举的每个变体可以拥有不同数量和类型的关联数据. 这增加了类型的灵活性和表达力,使你能够更精 ...
- css 让页面变灰色
html { -webkit-filter: grayscale(1); }-webkit-filter(滤镜)有十种效果,分别是: // grayscale 灰度 // sepia ...
- MySQL Docker搭建挂载并启用远程连接
1.拉取镜像 后面可以指定版本号,这里使用8.0 docker pull docker.io/mysql:8.0 2.查看mysql镜像 docker images 3.启动docker并挂载 doc ...
- 关于编译告警 C4819 的完整解决方案 - The file contains a character that cannot be represented in the current code page (number). Save the file in Unicode format to prevent data loss.
引言 今天迁移开发环境的时候遇到一个问题,同样的操作系统和 Visual Studio 版本,原始开发环境一切正常,但是迁移后 VS 出现了 C4819 告警,上网查了中文的一些博客,大部分涵盖几种解 ...
- Android查看apk安装包的AndroidManifest.xml文件
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` Android查看apk安装包的AndroidManife ...
- azure 代码管理器网址
visual studio 团队资源管理器 azure代码管理网页 记录一下 https://dev.azure.com
- 简单的解释下什么是CNAME
今天在用阿里云的安全防护给接口域名做web应用防火墙,需要配置cname,原来有用到过但是一直没去了解过,只知道怎么用今天搜了一下看看下面是原文,白话文好理解分享一下. 什么是CNAME?先简单的说下 ...
- Spring-jdbcTempalate研究
很多时候,需要使用jdbcTemplate,既有出于性能考虑的因素,也有出于个人偏好. 关于jdbcTemplate的几个关键性的问题: 一.简介 JdbcTemplate位于org.springfr ...
- 在Linux应用层使用POSIX定时器
在Linux应用层使用POSIX定时器 ref : http://blog.chinaunix.net/uid-28458801-id-5035347.html http://blog.sina.co ...
- jsp---------------------复选框,全选按钮
js部分:注意:<script type="text/javascript" ></script>内不能有其他内容,否则会无效,若有则另起一对<scr ...