Linux grep,egrep及相应的正则表达式用法详解
linux在进行文本处理过程中的文本搜索工具称为正则表达式。文本搜索工具有grep、egrep、fgrep,egrep为正则表达式的扩展正则表达式,fgrep用于搜索文本字符串,与 grep 和 egrep 命令不同,因为它搜索字符串而不是搜索匹配表达式的模式。grep的含义为: global search Regular expression and Print out the line。
正则表达式(REGular EXPression REGEXP)是由元字符及正常字符所书写的模式,其中的元字符不表示字符本身的意义,而是用于表达控制或通配功能,根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,显示能匹配到的行。
首先讲述的是正则表达式grep指令的用法以及一些常用的选项的应用以及简单的示例:
grep [OPTIONS] PATTERN [FILE...]
--color=auto 自动显示 }
always 有时 } 对匹配到内容是否自动显示为红色
never 从不显示 }
-o:只显示被匹配到的内容
-i:ignore case ,所有的不区分字符大小写
-v: 显示不能够被模式匹配到的行
-E :使用扩展的正则表达式
-A # : 被模式所匹配的行以及后面#行
-B#:被模式所匹配的行以及前面#行
-C#:被模式所匹配的行以及前后#行
示例1:显示匹配到的字符红色
[root@localhost ~]# grep --color=auto "root" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
示例2:只显示匹配到的内容
[root@localhost ~]# grep -o --color=auto "root" /etc/passwd
root
root
root
root
下面讲的是基本正则表达式的元字符:
字符匹配:
. :匹配单个字符
[]:匹配指定范围内的任意单个字符
例: [root@localhost ~]# grep "[Cc]a" /etc/rc.d/rc.sysinit
匹配出现Ca或ca,a不作为结尾,C/c不作为开头,匹配Ca或者ca在文本中每行的任意位置。
[^] :匹配指定范围外的任意单个字符
[0-9]、[[:digit:]]表示0-9中的任意的单个数字
[^0-9]、[^[:digit:]]表示0-9范围外的任意单个字符
[a-z]、[[:lower:]]表示a-z中任意一个小写字母
[A-Z]、[[:upper:]]表示A-Z中任意一个大写字母
[[:space:]]表示一个空格符
[[:punct:]]表示任意一个标点符号
[0-9a-zA-Z]、[[:alnum:]]表示任意一个数字或字母
[a-zA-Z]、[[:alpha:]]表示任意一个大写字母或小写字母
次数匹配:在期望匹配字符后面提供一个控制符,用于表达匹配前面字符指定的次数。
* :任意次数
例:"ab*c" ab……bc匹配任意个b abbc ,ac 可以匹配到 abb, 不能匹配到 .* : 任意长度的任意字符 (贪婪模式,会仅可能的去匹配)
例
[root@localhost ~]# grep "r.*t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
\? :0次或1次 ,表示其左侧字符可有可无 " ab \?c " abc ,ac 可以 abbc 不可以
\+ : 1次或多次,表示其左侧字符至少出现1次;
" ab \+c " ac ,不可以 abc,abbbbc 可以
\{m\} :m次,表示其左侧字符精确出现m次; \{m,n\}:表示其左侧字符至少出现m次,至多出现n次; "ab\{2\}c" 匹配2次 -> abbc
\{0,n\} : 至多n次 "ab\{0,3\}c" 0~3次 -> ab、 abbc 、abbbc \{m,\} : 至少m次
"ab\{1,\}c" -> ab、 abbc 、abbbc 、 ab…bc
位置锚定:
^ :锚定行首,^ PATTERN
$:锚定行尾,PATTERN$
^PATTERN$ :用模式来匹配整行内容
^$ :匹配空白行;
例:用于匹配整行内容
[root@localhost ~]# grep "^sh.*sh$" /etc/passwd
sharang:x:5002:5002::home/sharang:/bin/tcsh
单词锚定: 由非特殊字符组成的连续的字符串
锚定单词词首: \< PATTERN或\b [root@localhost tmp]# grep "\<sh" /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
锚定词尾: PATTERN\>或PATTERN \b
\<PATTERN\>:匹配到PATTERN能匹配到整个单词
例:匹配两位数字
[root@localhost ~]# ifconfig | grep "\<[0-9]\{2\}\>"
eth0 Link encap:Ethernet HWaddr 00:0C:29:5A:B6:F5
inet addr:192.168.191.16 Bcast:192.168.191.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe5a:b6f5/64 Scope:Link
分组:\(\)
注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符可以被grep记忆 (保存于内置的变量 中,这些变量是 \1 , \2 ,…) 因此,还可以被引用
\1 : 引用,模式自左而右,由第一次左括号以及与之对应的右括号中的模式所匹配到的内容
\2 :引用 ,模式中自左而右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容;
\(ab\(cd\)\) \1 \2 \1匹配到ab \2匹配到cd
(1) He like his lover. (2) He like his liker. (3) She love her lover. (4) She love her liker.
"\(l..e\).*\1" 可以匹配上面内容
下面说下扩展的正则表达式egrep,也是通过搜索匹配表达式的模式,不过于grep的区别就是不需要添加转义符\ ,字符匹配、次数匹配、位置锚定、分组的用法是相同的。
字符匹配: .:匹配单个字符
[]:匹配任意单个字符
[^]:匹配范围外的任意单个字符
次数匹配:
*:任意次
?:0次或1次
+ :至少1次
{m}:精确匹配m次
{m,n}: 至少m次,至多n次
{m,}:至少m次
{0,n}:至多n次
位置锚定:
^: 锚定行首
$ : 锚定行尾
\<、\b:锚定词首
\>、\:锚定词尾
分组:
(): 引用为: \1,\2...
或者:
a|b :a或b,或者两侧的所有内容;
例:匹配meminfo中S或s开头的行
# egrep "^(S|s)" /proc/meminfo
最后的fgrep命令是用来查找一个或多个与给出的字符串或词组相匹配文件中的行。fgrep 查询速度比grep命令快,但是不够灵活:它只能找固定的文本,而不是规则表达式。
转载于:https://blog.51cto.com/jimchen/1627303
相关文章:

Java GC 日志解析
JVM 在Java应用程序优化中是不可缺少的一大重项,如何合理配置Java参数,如果验证配置参数的有效性,从GC日志中可以获得很重要的提示,以下是笔者对GC垃圾收集器默认开启的组合日志的部分的解析,希望能帮到想学习的同学O(…

MySQL 备份和恢复策略
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。本文主要对MyISAM表做备份恢复。 备份策略一:直接拷贝数据库文件(不推荐ÿ…

zookeeper学习记录
2019独角兽企业重金招聘Python工程师标准>>> 背景 前段时间看了S4流计算引擎,里面使用到了zookeeper进行集群管理,所以也就花了点时间研究了下zookeeper,不求看懂所有源码,但求了解其实现机制和原理,清楚其…
Ubuntu的apt-get使用国内的源
1、复制原文件备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2、打开清华大学TUNA官网发布的Ubuntu 镜像使用帮助。 3、复制下面框中的内容,打开自己的Ubuntu系统。 4、 将框中的内容替换掉原来的所有内容 sudo gedit /etc/apt/sources.list 5、 进…

51单片机实现对24C02进行页写、顺序读取并显示验证
源:51单片机实现对24C02进行页写、顺序读取并显示验证 //************************************************************************************* //**程序名称:51单片机实现对24C02进行页写、顺序读取并显示验证 //**编写人:**** //**修…

配置MySQL主从复制
MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时,它通知主服务器从…
PHP 单元测试
本文首发于 https://jaychen.cc/article/34作者 Jaychen朋友,你听说过安。。。不是,写过单元测试吗。 单元测试是开发过程中必不可少的一环,一个项目有良好的单元测试代码,重构的勇气都大很多。这次写一篇小文来介绍一下 PHP 的单…

CI框架如何删除地址栏的 index.php
默认 CI 框架显示地址是 http://localhost/ci/index.php/test/ 去掉index.php这样会更好些。1.修改Http.conf的 LoadModule rewrite_module modules/mod_rewrite.so 去掉注释2.ci根目录增加.htaccess文件 <IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /ci#Remov…

网站安全配置(Nginx)防止网站被攻击(包括使用了CDN加速之后的配置)
2019独角兽企业重金招聘Python工程师标准>>> 网站被攻击是一个永恒不变的话题,网站攻击的方式也是一个永恒不变的老套路。找几百个电脑(肉鸡),控制这些电脑同时访问你的网站,超过你网站的最大承载能力&…

除了 AI,这些技术为 IIoT 插上飞向“4.0”的翅膀
“中国制造2025、德国工业4.0、美国先进制造”——在21世纪的工业领域,“制造强国”开启新一轮角逐。尽管实现路径各有侧重,但题中之义均是通过互联网和智能技术实现企业生产和管理的降本增效。正因此,IIoT被视为助推智能制造转型升级的“催化…

[20171225]查看并行执行计划注意的问题.txt
[20171225]查看并行执行计划注意的问题.txt--//如果使用dbms_xplan.display_cursor查看并行执行计划注意一些问题,通过例子说明:1.环境:SCOTTbook> &r/ver1PORT_STRING VERSION BANNER------------------------------ -------------- ------…

expires与etag控制页面缓存的优先级
expires指令控制HTTP应答中的“Expires”和“Cache-Control”Header头部信息,启动控制页面缓存的作用time:可以使用正数或负数。“Expires”头标的值将通过当前系统时间加上设定time值来设定。time值还控制"Cache-Control"的值:负数表示no-cac…

API 大赛决赛名单出炉,速来围观!
创新云转型,智慧云服务2021年移动云API应用创新开发大赛正在火热进行中各个赛道激烈PK优秀开发者同台切磋彰显实力!10月14日,2021年移动云API应用创新开发大赛复赛在中移软件园双创路演大厅圆满举办。本次复赛分为移动赛道和企业赛道分别进行…

将日期yyyy-MM-dd转为数字大写的形式
/*** 将日期转大写* 例如:2013-05-13转为 二0一三年五月十三日* param date* return */public static String getDxDate(String date){String dateArr[] date.split("-");String year dateArr[0];String month dateArr[1];String day dateArr[2];Str…

DevExpress v17.2新版亮点—WPF篇(四)
2019独角兽企业重金招聘Python工程师标准>>> DevExpress年终击穿底价,单套授权低至67折!仅剩最后6天!查看详情>>> 用户界面套包DevExpress v17.2终于正式发布,本站将以连载的形式为大家介绍各版本新增内容。本…

CI框架验证码CAPTCHA 辅助函数的使用
使用CAPTCHA 辅助函数很方便生成验证码,但是图片是存储在文件夹下,不是输出流,感觉不够完美,可以拿来用用。 说明:产生4位的随机数,CI根目录下建立captcha文件夹。 <?php $this->load->helper(ca…

GitLab 上市,市值高达 149 亿美元!GitHub 的头号劲敌来了
整理 | 祝涛 出品 | CSDN当地时间周四,知名代码和资源托管服务平台 GitLab(股票代码GTLB)完成了IPO(首次公开募股),在纳斯达克成功上市。GitLab在本次 IPO 中筹集了约 6.5 亿美元。GitLab此前曾计划I…

将ubuntu系统设置静态ip及ssh
2019独角兽企业重金招聘Python工程师标准>>> sudo vim /etc/network/interfaces 输入以下:auto lo iface lo inet loopback auto eno1 iface eno1 inet static address 192.168.1.197 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameserver 192.168…

ECMAScript 5 —— 单体内置对象之Math对象
ECMAScript 还为保存数学公式和信息提供了一个公共位置,即 Math 对象。与我们在 JavaScript 直接编写的计算功能相比,Math 对象提供的计算功能执行起来要快得多。Math 对象中还提供了辅助完成这些计算的属性和方法。 一. Math 对象的属性 Math 对象包含的…

织梦内容管理系统修改
1.如何去掉互动中心 修改根目录下templates——default——index.htm文件,删除以下内容 <div id"rightAD1" style:margin:10px auto"></div> <div class"usercenter">.....到</div> <!-- /usercenter --&…

斯坦福大学 AI100 报告发布:AI 发展速度惊人,但风险也正走进现实
作者 | 阳光来源 | 学术头条语言处理、计算机视觉和模式识别的巨大进步,意味着人工智能(Artificial Intelligence,AI)每天都在与人们的生活进行交互,从帮助人们选择电影,到帮助人们解决医疗诊断难题方面…

linux===Ubuntu 上安装 Node.js
https://www.cnblogs.com/andfly/p/6681487.html转载于:https://www.cnblogs.com/botoo/p/8118903.html

非计算机专业的学生,从事编程工作的上升壁垒是什么?
很多同学自己的专业并不是计算机,但是看到如今IT行业发展的这么好,也想转行学习编码。但是自己非科班出身,又到了快毕业的年纪,开始学习编程来得及吗?这些年来,很多培训机构都借鉴了少儿编程培训的经验&…

HTTP头信息中的参数Etag
服务器如果是集群,不同服务器返回的 Http Header 中的 Etag 参数不一样。如果是图片是程序生成的,我们可以用 no-cache 这些 header 来控制,但如果这些图片是 apache 或 nginx 等呢?下面开始介绍 Etag:Etag在HTTP1.1中…

利用JS使用POST方式提交请求的方法
2019独角兽企业重金招聘Python工程师标准>>> function post(url, params) {var temp document.createElement("form");temp.action url;temp.method "post";temp.style.display "none";for (var x in params) {var opt document…

input框取消光标颜色手机端不生效
<style> input{ color:transparent; } </style> <input value"我要隐藏光标">//文字颜色可以使用text-shadow属性<style> input{ color:transparent; text-shadow:0 0 0 red; } </style> PC端没问题,但是手机端测试无效。…

http响应Last-Modified和ETag以及Apache和Nginx中的配置
基础知识 1) 什么是”Last-Modified”? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文件在服务期端最后被修改的时间,格式类似这样: …

全面分析再动手的习惯:链表的反转问题(递归和非递归方式)
定义一个方法(函数),实现输入一个链表的头结点,然后可以反转这个链表的方向,并输出反转之后的链表的头结点。 typedef struct Node{int data;Node *next; } Node, *List; 链表类的问题,涉及到了很多指针的操…

Facebook 正在研究新型 AI 系统,以自我视角与世界进行交互
编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)你是否能想象 AI 以第一人称视角来理解世界是什么样的呢?未来,以第一人称视角理解世界的 AI 可以开启沉浸式体验的新时代。增强现实(AR)眼镜和虚拟现实&…

docker-2-简单使用docker-ce
安装请看docker-ce安装文档 docker命令合集 参考docker --help 选项 -D 使用debug模式-l 日志级别(有debug|info|warn|error|fatal),默认info-v 显示版本管理命令config 管理docker配置container 管理容器image 管理镜像network 管理网络service swarm 常用命令atta…