grep命令及正则表达式

grep基本概念

grep:global search regular expression and print out the line.

作用:文本过滤器,用于文本搜索,用指定“模式”逐行匹配。

模式:由正则表达式字符及文本字符所编写的过滤条件

正则表达式:由一类特殊字符和文本字符所编写的模式,其有些字符不表示字符字面意义,而表示控制或通配的功能

比较记忆:

基本正则表达式:BRE 扩展正则表达式:ERE grep -E = egrep

grep语法

grep [OPTIONS] PATTERN [FILE…]

OPTIONS: --color=auto:对匹配到的文本着色后高亮显示; -i:ignorecase,忽略字符的大小写; -o:仅显示匹配到的字符串本身; -v, --invert-match:显示不能被模式匹配到的行; -E:支持使用扩展的正则表达式元字符; -q, --quiet, --silent:静默模式,即不输出任何信息; -A #:after, 后#行 -B #:before,前#行 -C #:context,前后各#行

基本正则表达式原字符

字符匹配:

. :匹配任意单个字符; []:匹配指定范围内的任意单个字符; [^]:匹配指定范围外的任意单个字符; [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

匹配次数:

用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;

*:匹配其前面的字符任意次;0,1,多次; 例如:grep "x\+y" abxy aby xxxxxy yab .*:匹配任意长度的任意字符 \?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的; \+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次; \{m\}:匹配其前面的字符m次; \{m,n\}:匹配其前面的字符至少m次,至多n次; \{0,n\}:至多n次 \{m,\}:至少m次

位置锚定:

^:行首锚定;用于模式的最左侧; $:行尾锚定;用于模式的最右侧; ^PATTERN$:用于PATTERN来匹配整行; ^$:空白行; ^[[:space:]]*$:空行或包含空白字符的行; \< 或 \b:词首锚定,用于单词模式的左侧; \> 或 \b:词尾锚定,用于单词模式的右侧; \<PATTERN\>:匹配完整单词; 单词:非特殊字符组成的连续字符(字符串)都称为单词;

分组及引用

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理; \(xy\)*ab Note:分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为: \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符; \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符; \3 ... He loves his lover. He likes his lover. She likes her liker. She loves her liker. ~]# grep "\(l..e\).*\1" lovers.txt 后向引用:引用前面的分组括号中的模式所匹配到的字符;

扩展正则表达式的元字符

字符匹配:

.:任意单个字符 []:指定范围内的任意单个字符 [^]:指定范围外的任意单个字符

次数匹配:

*:任意次,0,1或多次; ?:0次或1次,其前的字符是可有可无的; +:其前字符至少1次; {m}:其前的字符m次; {m,n}:至少m次,至多n次; {0,n} {m,}

位置锚定

^:行首锚定; $:行尾锚定; \<, \b:词首锚定; \>, \b:词尾锚定;

分组及引用:

():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中; 后向引用:\1, \2, ... 或: a|b:a或者b; C|cat:C或cat (c|C)at:cat或Cat

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2016-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏较真的前端

关于数字的前端面试题

41360
来自专栏十月梦想

php字符串基本操作

字符串查找strstr(查找目标字符串,查找关键词),stristr(查找目标字符串,查找关键词)

7110
来自专栏LuckQI

Redis初识~Set命令

12320
来自专栏xingoo, 一个梦想做发明家的程序员

【面试虐菜】—— JAVA面试题(1)

今天参加笔试,里面有设计模式,和一些基础题! 印象最深的是:什么不是Object的函数,我蒙的finalize,哎,无知! 还问了,接口与抽象类的不同,还...

21590
来自专栏CDA数据分析师

Python面试中8个必考问题

1、下面这段代码的输出结果是什么?请解释。 ? 怎样修改extendList的定义能够产生以下预期的行为? 上面代码输出结果将是: ? 很多人都会误认为list...

205100
来自专栏五分钟学算法

每天一算:Reverse Linked List II

变换的是2,3,4这三个点,那么我们可以先取出2,用front指针指向2,然后当取出3的时候,我们把3加到2的前面,把front指针前移到3,依次类推,到4后停...

11910
来自专栏PHP实战技术

解构赋值,你不能不懂!

150100
来自专栏布尔

想起温习一下JS中的this apply call arguments

很多时候讲到语言入门,大家会认为就是要了解一下语言的语法、数据类型和常用函数。这一课对于所有的计算机专业的毕业生来说都可以自学,然而在最近的实践中(带了两个实习...

225100
来自专栏彭湖湾的编程世界

【JavaScript】 JS面向对象的模式与实践

参考书籍 《JavaScript高级语言程序设计》—— Nicholas C.Zakas 《你不知道的JavaScript》  —— KYLE SIMPSON ...

37760
来自专栏达摩兵的技术空间

a>b的那些事

经常会遇到对比两个值大小关系的逻辑,常规的处理中我们都是处理两个数字或者数字类型的字符串。那么这里进行延伸拓展的练习,来避免一些开发中的采坑。

7410

扫码关注云+社区

领取腾讯云代金券