grep(模式匹配器)详解
1、grep, egrep, fgrep的区别
grep(global search regular expression and prind out the line)全称就叫全面搜索正则表达式并打印行出来,简单来说就是文本搜索工具,根据用户指定的文本搜索模式对目标文本进行搜索,显示能够所匹配的行,当然,也可以把grep看也是一个文本过虑器、模式匹配器。
egrep:使用扩展正则表达式来构建模式,相当于grep –E、通常写成egrep、用法基本上跟grep的相同、只是有些不需要 \ 转译。
fgrep:fash,它不解析正则表达式、想找什么就跟什么就可以了。
2、grep的常用选项
grep: 根据模式搜索文本,并将符合模式的文本行显示出来。
Pattern: 文本字符和正则表达式的元字符组合而成匹配条件。
grep [options] PATTERN [FILE...]-i:不区分大小写对文本进行匹配搜索--color:显示颜色-v:显示没有被模式匹配到的行-o:只显示被模式匹配到的字符串 -E: 使用扩展正则表达式-A #:显示模式匹配到的行以及后面的N行 #代表你要显示多少行-B #: 显示模式匹配到的行以及前面的N行-C #:显示模式匹配到的行以及上下的N行
注意:
模式当中一但包含元字符一定要用’'或"“号引起来,单双引号都可以、只不过如果其中出现了变量、并且我们希望做变量替换的话那就要使用”"双引号了、否则可以不加区分的使用。
3、通配符
.(点号):匹配任意的单个字符的[^]:表示指定范围外的任意单个字符、就是使用了脱字符取反[]:指定范围内的任意的单个字符[0-9] [[:digit:]]:表示匹配0到9的任意单个数字、两种表示方法都可以[a-z] [[:lower:]]:表示匹配小写的a到z的任意单个字母、即a-z[A-Z] [[:upper:]]:表示匹配大写的A到Z的任意单个字母、即A-Z[[:alpha:]]:表示英文大小写字母、即:a-z,A-Z[[:space:]]:表示包含的空白字符、即空格键,tab键[[:alnum:]]:表示包含数字大小写字母、即0-9,A-Z,a-z[[:punct:]]:表示包含标点符号、即:" ' ? ! ; : # $...
字符的次数匹配:用来匹配其前面的字符的次数的
*:(星号)匹配其紧挨着星号的字符出现任意次例:x*y就是x可以出现意次、包括0次.*:(点星)匹配任意长度的任意字符\?:表示其前面的字符出现0次或者1次、\是转译字符例:x\?y:可以匹配到的只有xy和y\{m\}:匹配m次 如:x\{4\}y表示y前面的x出现4前就可以被匹配到
\{m,n\}:至少m次,至多n次
\{m,\}:至少m次
\{0,n\}:至多匹配n次、0不可以省略
位置锚定符:用于指定字符出现的位置
^:用于锚定行首,如(^Char) 匹配到的字符必须出现有行首的$:用于锚定行尾,如(Char$) grep 'bash$' /etc/passwd^$:空白行、查找一个文件中所出现的空白行 ^hello$表示只有hello的行
单词的锚定:
\<char:锚定词首,\<[r]表示一行以r开头的单词都可以匹配、也可以使用\b表示
char\>:锚定词尾,一行以r开头的单词都可以匹配、\b
\<hello\>:表示精确锚定hello这个单词
\<h…o\>:表示以h开头、以o结尾、中间跟了任意三个字符的单词
分组元字符:
\(\):分组 \是转译字符 例:\(ab\)*xyab括起来表示一个组了,表示xy前面的ab组现出任意次,可以被匹配到的abxy,ababxy,ababababxy,abababababababxy,......
引用: 对分组的字符块进行引用
\1:后向引用,引用前面的第一个左括号以及与之对应的右括号中模式所匹配到的内容
\2:后向引用,引用前面的第二个左括号以及与之对应的右括号中模式所匹配到的内容
.......例:\(a.b\)xy\1 可以匹配到的有(abxyab不可以匹配到)akbxyakb,a3bxya3b,aYbxyaYb例:我们来看这个例子、找出以下love与之对应的lover、like与之对应的likerHe like his lover.She love her liker.He love his lover.She like her liker.
4、egrep和fgrep
(1)egrep
使用扩展正则表达式来构建模式,相当于grep –E、通常写成egrep、用法基本上跟grep的相同、只是有些不需要 \ 转译。
元字符:字符匹配.:匹配任意单个字符[]:指定范围内的任意单个字符次数匹配:*:匹配其紧挨着星号的字符出现任意次?:表示其前面的字符出现0次或者1次+:匹配其前面的字符至少1次{m}:匹配其前面的字符m次{m,n}:至少m次,至多n次{m,}:至少m次{0,n}:至多n次做位置锚定:^:行首锚定$:行尾锚定\<:词首\>:词尾分组:():分组|:或者 ab|xy意思为ab或者xy a(b|x)y意思为aby或者axy
(2)fgrep
fash,它不解析正则表达式、想找什么就跟什么就可以了。
例如:[root@localhost ~]# fgrep "/bin/bash" /etc/passwd
root:x:0:0:root:/root:/bin/bash
user1:x:1000:1001::/home/user1:/bin/bash
user2:x:1001:1002::/home/user2:/bin/bash[root@localhost ~]# fgrep "defaults" /etc/fstab
/dev/vda1 / xfs defaults 0 1
/swapfile none swap defaults 0 0
5、练习:
1、显示/proc/meminfo文件中以不区分大小的s开头的行
grep -i '^s' /proc/meminfo
grep '^[sS]' /proc/meminfo2、显示/etc/passwd中以nologin结尾的行
grep 'nologin$' /etc/passwd
取出默认shell为/sbin/nologin的用户列表
grep "nologin$' /etc/passwd | cut -d: -f1
取出默认shell为bash,且其用户ID号最小的用户的用户名
grep 'bash$' /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f13、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行
grep "^#[[:space:]]\{1,\}[^[:space:]]" /etc/inittab4、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行
grep ':[0-9]:' /etc/inittab5、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行
grep '^[[:space:]]\{1,\}' /boot/grub/grub.conf6、显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行
grep '^\([0-9]\).*\1$' /etc/inittab
grep(模式匹配器)详解相关推荐
- zend framework php编码规范,Zend Framework常用校验器详解
本文实例讲述了Zend Framework常用校验器.分享给大家供大家参考,具体如下: Date日期校验器 代码:<?php require_once 'Zend/Validate/Date.p ...
- NLB网路负载均衡管理器详解
原文:NLB网路负载均衡管理器详解 序言 在上一篇配置iis负载均衡中我们使用啦微软的ARR,我在那篇文章也中提到了网站的高可用性,但是ARR只能做请求入口的消息分发服务,这样如果我们的消息分发服务器 ...
- GC之7大垃圾收集器详解(下)
GC之7大垃圾收集器详解 目录 GC之CMS收集器 GC之SerialOld收集器 GC之如何选择垃圾收集器 GC之G1收集器 第一部分请参见: GC之7大垃圾收集器详解(上) 6. GC之CMS收集 ...
- GC之7大垃圾收集器详解(上)
GC之7大垃圾收集器详解 目录 GC之7大垃圾收集器概述 GC之Serial收集器 GC之ParNew收集器 GC之Parallel收集器 GC之ParallelOld收集器 GC之CMS收集器 GC ...
- python布局管理_Python基础=== Tkinter Grid布局管理器详解
本文转自:https://www.cnblogs.com/ruo-li-suo-yi/p/7425307.html @ 箬笠蓑衣 Grid(网格)布局管理器会将控件放置到一个二维的表 ...
- Python 装饰器详解(下)
Python 装饰器详解(下) 转自:https://blog.csdn.net/qq_27825451/article/details/84627016,博主仅对其中 demo 实现中不适合pyth ...
- Python 装饰器详解(中)
Python 装饰器详解(中) 转自:https://blog.csdn.net/qq_27825451/article/details/84581272,博主仅对其中 demo 实现中不适合pyth ...
- Python 装饰器详解(上)
Python 装饰器详解(上) 转自:https://blog.csdn.net/qq_27825451/article/details/84396970,博主仅对其中 demo 实现中不适合pyth ...
- python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析
#2018-04-06 13:52:30 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘课程]二十一.朴素贝叶斯分类器详解及中文文本舆 ...
- C 编译器、链接器、加载器详解
原文请见 C 编译器.链接器.加载器详解 0. 预编译 在编译 C++ 程序的预处理阶段,源程序中的所有常量表达式都需要首先计算并替换为对应的具体数值. C语言编译器在对源代码编译之前,还需要进一步的 ...
最新文章
- Kong APIGW — Plugins — 监控告警、日志审计
- ubuntu修改根用户密码
- python爬取小说写入txt_对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力...
- Js函数function基础理解
- 虚线 实现_redis跳跃表实现
- 【JAVA基础篇】内部类
- Spring Boot文档阅读笔记-how-to-implement-2-way-ssl-using-spring-boot
- 【插件发布】JAVA微服务框架,Jeecg-P3-Demo 1.0.0 插件开源发布
- python爬虫----handler和opener
- daysmatter安卓版_days matter
- c语言char a[10]; sprintf(a,%d,n);,c语言输入输出的一些细节
- SqlServer常用对象查询
- t470键盘拆解_张大妈 ThinkPad T470p 首篇 开箱拆机晒物
- 计算机频率原理,频率计数器的工作原理和发展
- 苹果cms永久免费影视建站程序
- 海科融通:关于降低商户银行卡刷卡手续费的公告
- 推理悬疑侦探小说大全合集隐私政策
- SpringBoot项目处理emoji表情到mysql
- 是谁在我的心里打了个结(十七)袋子
- 网易互娱动效设计师 | VX动效学习如何入门?
热门文章
- Mars3d开发——飞行漫游
- A Game of Thrones(78)
- 对校招生培养工作的建议_如何做好校招生的培育
- 阿里在开源领域又有哪些新动向?来首届阿里开源开放周找答案!
- python入门基础002
- csbte路点机器人_《cs1.6》awp地图
- 论文中英对照翻译--(Fusing Multiple Deep Features for Face Anti-spoofing)
- python编程设计高级_Python编程高级技巧| 选择好的名称
- 人工神经网络和神经网络,什么是人工神经网络?
- [usOJ5528]小奇的旅行计划