专栏首页北京马哥教育grep命令及正则表达式

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),作者:马哥教育

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • grep、egrep正则表达式之初窥门径

    何谓正则表达式 正则表达式,又称正规表示法、常规表示法 (Regular Expression,在代码中常简写为regex、regexp或RE),是一类字符所...

    小小科
  • 17个案例带你3分钟搞定Linux正则表达式

    正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。 元字符通常在Linux中分为两类: Shell元字符,由Linux Shell进行解析; 正则表达式...

    小小科
  • 百度员工离职总结:如何做个好员工?(都是大实话 )

    2014年7月4日,我从百度离职了。 这是第一次,我不是因为和老板闹翻而离职; 这是第一次,我带着晋升的喜悦而离职; 这是第一次,我带着满满的收获而离职。 ...

    小小科
  • 全国计算机二级C知识点总结3

    1.while循环while后圆括号中表达式的值决定了循环体是否将被执行。因此,进入while循环后,一定要有能使此表达式的值变为0的操作,否则循环将会无限制地...

    用户6755376
  • DeforGAN:用GAN实现星际争霸开全图外挂!

    本文提出了 DefogGAN,这是一种推断即时战略(Real-Time Strategy,RTS)游戏中战争迷雾后的隐藏信息状态的生成式方法。给定一个部分可观测...

    机器之心
  • 回文词

    在本题中,每个字符的镜像如图所示(空白符表示该字符镜像之后不能得到一个合法字符)。

    Vincent-yuan
  • 剑指Offer面试题:30.第一个只出现一次的字符

      最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字...

    Edison Zhou
  • 周末在学习正则,学习过程中发现这 6 个方便的正则表达式

    几乎所有流行的编程语言都支持正则表达式,因为正则实在是太强大了,它能让我们原本需要数十行代码才能完成的,正则大哥一行就能搞定了。

    前端小智@大迁世界
  • CAPTCHAs验证码被人工智能攻破

    据《科学》(Science)杂志2017年10月报道,一家名为Vicarious的人工智能公司开发的人工智能算法攻破了被人们广泛使用的CAPTCHAs验证码。 ...

    人工智能快报
  • 论文赏析[AI18]更快的基于非二叉化自底向上策略的转移系统成分句法分析

    Faster Shift-Reduce Constituent Parsing with a Non-Binary, Bottom-Up Strategygod...

    godweiyang

扫码关注云+社区

领取腾讯云代金券