关于正则表达式第一篇(r3笔记第29天)

正则表达式在编程语言中,数据库中,linux中都有着广泛的应用,一说起正则表达式就有些高深晦涩的味道,正则表达式精炼而重要,在Linux中有着举足轻重的作用,也是学好sed,awk的一个基本门槛。 正则表达式是基于正则表达式引擎来实现的,引擎主要有以下两类。可能大家对这个比较陌生。 POSIX基本正则表达式引擎 BRE POSIX扩展正则表达式引擎 ERE 大多数的Linux实现中都是BRE,也是默认的实现,还有扩展的实现就是ERE. 像grep,awk就支持基本和扩展的引擎,sed只支持基本引擎,也是基于性能的考虑。 学习awk相当于学习了一门新的编程语言,所以awk的功能很完善,扩展的引擎也支持了。 grep可以实现扩展的引擎,但是需要使用-E选项。 比如我们想查看一个字符bt,在b和t中间的字符可以出现0次或者1次。 bt,bat,bet等都是匹配的字符。

$ echo "bt" |grep 'b[ae]?t‘ --如果没有使用ERE就不会匹配到任何的数据

$ echo "bt" |grep -E 'b[ae]?t' --启用了ERE之后,就可以正确匹配了。 bt 关于BRE,主要有以下的模式 纯文本 特殊字符 锚字符 点字符 字符组 排除字符组 使用区间 特殊字符组 星号 --纯文本 对于纯文本来说是大小写敏感的,空格和数字也可以正常匹配,胆识空格不需要转义 比如我们需要匹配 一个字符串出现this的情况,使用This和this就有很大的不同。 ---使用sed来匹配 $ echo "This is a test"|sed -n '/This/p' This is a test echo "This is a test"|sed -n '/this/p' $ --使用awk来匹配 $ echo "This is a test"|awk '/This/{print $0}' This is a test --使用grep来匹配 $ echo "This is a test"|grep ‘This' This is a test $ echo “This is a test”|grep -i ‘THis‘ --忽略大小写 This is a test --特殊字符 以下的字符在正则表达式中会被视为特殊字符。 .*[]^$\+?|() 所以不能在文本中单独使用如上的特殊字符,需要加\做一个转义。 --sed来匹配字符\ echo "\ is a special character"|sed -n '/\\/p' \ is a special character --sed来匹配字符$,以下是几种测试的场景,可以对比一下输出结果。

$ echo "The price is $5.00"|sed -n '/$/p' The price is .00 $ echo "The price is $5.00"|sed -n '/\s/p' The price is .00

$ echo "The price is $5.00" The price is .00 $ echo "The price is \$5.00" The price is $5.00 $ echo 'The price is $5.00' The price is $5.00 $ echo 'The price is $5.00'|sed -n '/\$/p' The price is $5.00 echo "The price is $5.00"|sed -n '/\$/p'

对于字符/ $ echo "3 / 2"|sed -n '///p' sed: -e expression #1, char 3: unknown command: `/‘ 出这个错误是因为左斜线不是正则表达式的特殊字符的一部分,但是也需要转义,下面这样就没有问题了。 $ echo "3 / 2"|sed -n '/\//p' 3 / 2 后续部分在第二篇中继续分享。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-10-18

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linux驱动

C- unsigned :1之位域分析

做低层时,经常会读写寄存器,比如操作某位,设置为0或1,而在C语言中便为我们提供一种数据结构”位域”,使得我们通过读写”位域”来实现操作某位.

12640
来自专栏JavaQ

99%的高级程序员都这样使用null

如果使用某个对象或对象里属性前先判断是否为null,那就需要思考一下你的代码是否已经烂掉了。 null是什么意思,你能说清楚它的意图吗?方法返回了null,是出...

34960
来自专栏芋道源码1024

分布式事务 TCC-Transaction 源码分析 —— Dubbo 支持

1. 概述 本文分享 Dubbo 支持。 TCC-Transaction 通过 Dubbo 隐式传参的功能,避免自己对业务代码的入侵。可能有同学不太理解为什么说...

1K70
来自专栏程序员宝库

这些 Java 面试题必须会---鲁迅

写在前面 春天来了,万物复苏的季节到了. 许多程序猿安奈不住生理需求,我要涨工资,我要跳槽. 毕竟金三银四嘛. 那么要从众多的面试者中获得求职机会,我们就要面对...

313100
来自专栏aCloudDeveloper

string 之 strrev函数

Author: bakari  Date: 2012/8/9 继上篇。。。。。 下面是我写的代码与源码作的一些比较,均已严格测试通过,分别以“string 之”...

19690
来自专栏java一日一条

50个常见的 Java 错误及避免方法(第一部分)

在开发Java软件时可能会遇到许多类型的错误,但大多数是可以避免的。为此我们罗列了50个最常见的Java编码错误,其中包含代码示例和教程,以帮助大家解决常见的编...

12830
来自专栏java一日一条

Java 性能笔记:自动装箱/拆箱

如果我说“仅仅修改下面代码中的一个字符就可以获得五倍于当前的运行速度”你会怎么想呢?

8610
来自专栏阿杜的世界

Java Web技术经验总结(十五)

13530
来自专栏Java技术栈

IntegerCache的妙用和陷阱!

考虑下面的小程序,你认为会输出为什么结果? public class Test { public static void main(String[...

35750
来自专栏yukong的小专栏

【java并发编程实战3】解密volatilevolatile的使用场景

根据 as if serial原则,它强调了单线程。那么多线程发生重排序又是怎么样的呢?

8120

扫码关注云+社区

领取腾讯云代金券