grep和egrep正则表达式
Linux上文本处理三剑客
- grep :文本过滤( 模式:pattern) 工具
- grep, egrep, fgrep (不支持正则表达式搜索,但搜索纯文本的数据最快)
- sed :stream editor ,文本编辑工具
- awk :Linux上实际是gawk(GUN awk) ,文本报告生成器
正则表达式:
- 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
- 支持正则表达式的程序:grep, vim, less,nginx等
正则表达式分两类:
- 基本正则表达式:BRE
grep ,egrep -G
- 扩展正则表达式:ERE
grep -E, egrep
正则表达式引擎:
- 采用不同算法,检查处理正则表达式的软件模块
- PCRE(Perl Compatible Regular Expressions)
- 元字符分类:字符匹配、匹配次数、位置锚定、分组
grep
grep: Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
--color=auto: 对匹配到的文本着色显示;
-v: 显示不能够被pattern匹配到的行;
-i: 忽略字符大小写
-n:显示匹配的行号
-c: 统计匹配的行数,而不显示匹配到的内容
-o: 仅显示匹配到的字符串;
-q: 静默模式,不输出任何信息
-A #:after,显示匹配的行及其后#行
-B #: before,显示匹配的行及其前#行
-C #:context,显示匹配的行及其前后各#行
-e:实现多个选项间的逻辑or关系
grep –e 'cat' -e 'dog' file
-E:使用ERE
扩展的正则表达式
基本正则表达式元字符:
字符匹配:
.: 匹配任意单个字符;
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式:尽可能长的匹配
* :匹配前面的字符任意次,包括0次
.* :任意长度的任意字符
\? :匹配其前面的字符0或1次
\+ :匹配其前面的字符至少1次,但不需要紧随在第一次后面
\{m\} :匹配前面的字符m次
\{m,n\} :匹配前面的字符至少m次,至多n次
\{,n\} :匹配前面的字符至多n次
<=n次
\{m,\} :匹配前面的字符至少m次
>=m次
位置锚定:定位出现的位置
^ :行首锚定,用于模式的最左侧
$ :行尾锚定,用于模式的最右侧
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行或包含tab字符的行
\< 或 \b :词首锚定,用于单词模式的左侧
\> 或 \b :词尾锚定;用于单词模式的右侧
注意:在grep中,字母和数字的组合也被视为单词
\<PATTERN\>:锚定以PATTERN表达式做为单词的行
分组及引用
\(\):将1个或多个字符捆绑在一起作为一个整体进行处理
\(xy\)*ab:xy作为一个整体出现0此或多次
注意:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与其匹配的右括号之间的内容
\2:模式从左侧起,第二个左括号以及与其匹配的右括号之间的内容
\3:
……
后向引用:引用前面的分组括号中的模式所匹配的字符,且引用中的数据和分组模式匹配到的数据是一样
练习:
1、显示/etc/passwd 文件中不以/bin/bash 结尾的行
# grep -v "/bin/bash$" /etc/passwd
2 、显示用户rpc 默认的shell 程序
# grep "^rpc\>" /etc/passwd | cut -d: -f7
3 、找出/etc/passwd 中的两位或三位数
# grep -E "\<[0-9]{2,3}\>" /etc/passwd
4 、找出"netstat -tan" 命令的结果中以'LISTEN' 后跟0 、1或多个空白字符结尾的行
# netstat -tan | grep "\<LISTEN[[:space:]]*$"
egrep及扩展的正则表达式
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
选项:
-i,-o,-v,q,-A,-B,-C
-G:支持基本的正则表达式
扩展正则表达式元字符:
字符匹配:
.: 匹配任意单个字符;
[]: 匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式,尽可能长的匹配
* :匹配前面的字符任意次,包括0次
.* :任意长度的任意字符
? :匹配其前面的字符0或1次
+ :匹配其前面的字符至少1次
{m} :匹配前面的字符m次
{m,n} :匹配前面的字符至少m次,至多n次
{,n} :匹配前面的字符至多n次
<=n次
{m,} :匹配前面的字符至少m次
>=m次
位置锚定:定位出现的位置
^ :行首锚定
$ :行尾锚定
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行或包含tab字符的行
\< 或 \b :词首锚定
\> 或 \b :词尾锚定
注意:在grep中,字母和数字的组合也被视为单词 \<PATTERN\>:锚定以PATTERN表达式做为单词的行
分组及引用
():括号内模式会被记录于正则表达式引擎中:
后向引用:\1,\2,\3......
或者
a|b:a或者b
eg:C|cat :表示C或者cat
(C|c)at :表示Cat或者cat
练习:
1 、显示当前系统上,root,gao和user1用户的相关信息
# grep -E "\<(root|gao|uer1)\>" /etc/passwd
2 、统计以root 身份登录的每个远程主机IP
# who | grep -E "^root\>" | wc -l
3 、使用egrep 取出/etc/rc.d/init.d/functions
# echo "/etc/rc.d/init.d/functions" | grep -oE "[^/]+/?$"
grep和egrep正则表达式的更多相关文章
- Linux正则表达式grep与egrep
grep -io "http:/=[A-Z0-9]\{16\}" ./wsxf.txt >wsxf_urls.txt Linux正则表达式grep与egrep 正则表达式:它 ...
- Linux三剑客之grep 与 egrep
grep: Linux上文本处理三剑客 grep:文本过滤(模式:pattern)工具; *(grep, egrep, fgrep) sed:stream editor,文本编辑工具: awk:Lin ...
- grep与正则表达式,grep、egrep和fgrep
grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串. ...
- 快速掌握grep命令及正则表达式
Linux系统自带了支持拓展正则表达式的 GNU 版本 grep 工具,所有的Linux发行版中均默认安装grep ,grep 命令被用来检索一台服务器或工作站上任何位置的文本信息,如何在 Linux ...
- linux中grep和egrep的用法
1. grep简介 grep (global search regular expression_r(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大 ...
- grep、egrep、fgrep的用法与特性详解
[转载自]http://tanxw.blog.51cto.com/4309543/1361993 开篇 学习Linux也有一段时间了,对Linux多少也算是有点了解了,越是了解也就越对这 ...
- 07 grep命令与正则表达式
grep命令 首先我们知道grep命令是用来做文件内容过滤的!如果你要在文件中查找一些对应的内容,我们如何来过滤找到其中我们需要符合条件的内容呢?grep命令结合正则表达式就可以实现: grep.eg ...
- grep与egrep的区别
grep与egrep的区别: 在linux系统环境下,我们通常使用grep命令来过滤出需要的行而egrep确很少使用,他们的区别其实很简单,grep默认不支持正则表达式,egrep默认支持正则表达式, ...
- centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课
centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~ ...
随机推荐
- OC 属性关键字
// 属性关键字 /* 1.ARC下(自动管理内存,自动引用计数)(IOS) strong,weak ----------------------------------------- 2.MRC下( ...
- [LeetCode] 35. Search Insert Position ☆(丢失的数字)
转载:https://leetcode.windliang.cc/leetCode-35-Search-Insert-Position.html 思路 Given a sorted array ...
- Jpa实体类生成图解
Jpa实体类生成图解 创建连接 创建项目
- js运动例子1
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- SharePoint 2013的100个新功能之网站管理(一)
一:设置盘 网站操作现在被替换为新的(设置)盘子.一些新的操作像添加一个应用.添加一个页面或设计管理器被添加而像创建网站则从菜单中移除了. 二:移除以其他用户身份登录 在SharePoint 2013 ...
- oracle不小心更新了数据库中的所有内容后的恢复
开发过程中,在更新数据库中的某一条数据时,由于疏忽忘记加where判断条件了,这时更新会提示是否要更新全部数据,但是由于自己没有仔细看提示导致直接点确定并commit了,导致数据库中所有数据的相关字段 ...
- SQL2012 创建备份计划
打开数据库,选择 管理 -> 新建维护计划,填写计划名称 修改计划参数 工具箱->备份数据库任务,拖到计划里 编辑任务 拖动清除数据库任务到计划 编辑清除任务 从备份任务到清除任务拖一个箭 ...
- 一个TED演讲背后的文化论
0. 前言 写这个前言让我很难受,当然不是心情难受哈,此时的状态是很High的哦,大中午觉都省了, 说难受是我觉得我这语言文字太渣了,相比今天的主题确实很没“文化”.但我也很庆幸,能 看到这么个人认为 ...
- Python decode和encody
s = "我今天非常的困" bs = s.encode("utf-8")# 把字符串转化成utf-8格式bytes # bytes 不是给人看的, 给机器用的 ...
- SWIFT显示底部的工具条
有以下页面显示我的讯息,用户可以点击右上角的编辑按钮进入删除状态.点击编辑按钮后,按钮文字改为“取消”,左上角的按钮变为“全选”,同时显示底部工具条带有“删除”按钮 实现起来挺简单的,在正常状态下点击 ...