linux shell 正则表达式(BREs,EREs,PREs)差异比较

在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。这些是正则表达式的定义。 由于起源于unix系统,因此很多语法规则一样的。但是随着逐渐发展,后来扩展出以下几个类型。了解这些对于学习正则表达式。

一、正则表达式分类:

1、基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx  简称 BREs)

2、扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)

3、Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs)

说明:只有掌握了正则表达式,才能全面地掌握 Linux 下的常用文本工具(例如:grep、egrep、GUN sed、 Awk 等) 的用法

二、Linux 中常用文本工具与正则表达式的关系

常握 Linux 下几种常用文本工具的特点,对于我们更好的使用正则表达式是很有帮助的

grep , egrep 正则表达式特点:

1)grep 支持:BREs、EREs、PREs 正则表达式

grep 指令后不跟任何参数,则表示要使用 ”BREs“

grep 指令后跟 ”-E" 参数,则表示要使用 “EREs“

grep 指令后跟 “-P" 参数,则表示要使用 “PREs"

2)egrep 支持:EREs、PREs 正则表达式

egrep 指令后不跟任何参数,则表示要使用 “EREs”

egrep 指令后跟 “-P" 参数,则表示要使用 “PREs"

3)grep 与 egrep 正则匹配文件,处理文件方法

a. grep 与 egrep 的处理对象:文本文件

b. grep 与 egrep 的处理过程:查找文本文件中是否含要查找的 “关键字”(关键字可以是正则表达式) ,如果含有要查找的 ”关健字“,那么默认返回该文本文件中包含该”关健字“的该行的内容,并在标准输出中显示出来,除非使用了“>" 重定向符号,

c. grep 与 egrep 在处理文本文件时,是按行处理的

sed 正则表达式特点

1)sed 文本工具支持:BREs、EREs

sed 指令默认是使用"BREs"

sed 命令参数 “-r ” ,则表示要使用“EREs"

2)sed 功能与作用

a. sed 处理的对象:文本文件

b. sed 处理操作:对文本文件的内容进行 --- 查找、替换、删除、增加等操作

c. sed 在处理文本文件的时候,也是按行处理的

Awk(gawk)正则表达式特点

1)Awk 文本工具支持:EREs

awk 指令默认是使用 “EREs"

2)Awk 文本工具处理文本的特点

a. awk 处理的对象:文本文件

b. awk 处理操作:主要是对列进行操作

三、常见3中类型正则表达式比较字符

说明

Basic RegEx

Extended RegEx

python RegEx

Perl regEx

转义

\

\

\

\

^

匹配行首,例如'^dog'匹配以字符串dog开头的行(注意:awk 指令中,'^'则是匹配字符串的开始)

^

^

^

^

$

匹配行尾,例如:'^、dog$'匹配以字符串 dog 为结尾的行(注意:awk 指令中,'$'则是匹配字符串的结尾)

$

$

$

$

^$

匹配空行

^$

^$

^$

^$

^string$

匹配行,例如:'^dog$'匹配只含一个字符串 dog 的行

^string$

^string$

^string$

^string$

\<

匹配单词,例如:'\

\<

\<

不支持

不支持(但可以使用\b来匹配单词,例如:'\bfrog')

\>

匹配单词,例如:'frog\>'(等价于'frog\b '),匹配以 frog 结尾的单词

\>

\>

不支持

不支持(但可以使用\b来匹配单词,例如:'frog\b')

\

匹配一个单词或者一个特定字符,例如:'\'(等价于'\bfrog\b')、'\'

\

\

不支持

不支持(但可以使用\b来匹配单词,例如:'\bfrog\b'

()

匹配表达式,例如:不支持'(frog)'

不支持(但可以使用\(\),如:\(dog\)

()

()

()

\(\)

匹配表达式,例如:不支持'(frog)'

\(\)

不支持(同())

不支持(同())

不支持(同())

匹配前面的子表达式 0 次或 1 次(等价于{0,1}),例如:where(is)?能匹配"where" 以及"whereis"

不支持(同\?)

\?

匹配前面的子表达式 0 次或 1 次(等价于'\{0,1\}'),例如:'where\(is\)\? '能匹配 "where"以及"whereis"

\?

不支持(同?)

不支持(同?)

不支持(同?)

?

当该字符紧跟在任何一个其他限制符(*, +, ?, {n},{n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个"o",而 'o+' 将匹配所有 'o'

不支持

不支持

不支持

不支持

.

匹配除换行符('\n')之外的任意单个字符(注意:awk 指令中的句点能匹配换行符)

.

.(如果要匹配包括“\n”在内的任何一个字符,请使用:'(^$)|(.)

.

.(如果要匹配包括“\n”在内的任何一个字符,请使用:' [.\n] '

*

匹配前面的子表达式 0 次或多次(等价于{0, }),例如:zo* 能匹配 "z"以及 "zoo"

*

*

*

*

\+

匹配前面的子表达式 1 次或多次(等价于'\{1, \}'),例如:'where\(is\)\+ '能匹配 "whereis"以及"whereisis"

\+

不支持(同+)

不支持(同+)

不支持(同+)

+

匹配前面的子表达式 1 次或多次(等价于{1, }),例如:zo+能匹配 "zo"以及 "zoo",但不能匹配 "z"

不支持(同\+)

+

+

+

{n}

n 必须是一个 0 或者正整数,匹配子表达式 n 次,例如:zo{2}能匹配

不支持(同\{n\})

{n}

{n}

{n}

{n,}

"zooz",但不能匹配 "Bob"n 必须是一个 0 或者正整数,匹配子表达式大于等于 n次,例如:go{2,}

不支持(同\{n,\})

{n,}

{n,}

{n,}

{n,m}

能匹配 "good",但不能匹配 godm 和 n 均为非负整数,其中 n <= m,最少匹配 n 次且最多匹配 m 次 ,例如:o{1,3}将配"fooooood" 中的前三个 o(请注意在逗号和两个数之间不能有空格)

不支持(同\{n,m\})

{n,m}

{n,m}

{n,m}

x|y

匹配 x 或 y,例如: 不支持'z|(food)' 能匹配 "z" 或"food";'(z|f)ood' 则匹配"zood" 或 "food"

不支持(同x\|y)

x|y

x|y

x|y

[0-9]

匹配从 0 到 9 中的任意一个数字字符(注意:要写成递增)

[0-9]

[0-9]

[0-9]

[0-9]

[xyz]

字符集合,匹配所包含的任意一个字符,例如:'[abc]'可以匹配"lay" 中的 'a'(注意:如果元字符,例如:. *等,它们被放在[ ]中,那么它们将变成一个普通字符)

[xyz]

[xyz]

[xyz]

[xyz]

[^xyz]

负值字符集合,匹配未包含的任意一个字符(注意:不包括换行符),例如:'[^abc]' 可以匹配 "Lay" 中的'L'(注意:[^xyz]在awk 指令中则是匹配未包含的任意一个字符+换行符)

[^xyz]

[^xyz]

[^xyz]

[^xyz]

[A-Za-z]

匹配大写字母或者小写字母中的任意一个字符(注意:要写成递增)

[A-Za-z]

[A-Za-z]

[A-Za-z]

[A-Za-z]

[^A-Za-z]

匹配除了大写与小写字母之外的任意一个字符(注意:写成递增)

[^A-Za-z]

[^A-Za-z]

[^A-Za-z]

[^A-Za-z]

\d

匹配从 0 到 9 中的任意一个数字字符(等价于 [0-9])

不支持

不支持

\d

\d

\D

匹配非数字字符(等价于 [^0-9])

不支持

不支持

\D

\D

\S

匹配任何非空白字符(等价于[^\f\n\r\t\v])

不支持

不支持

\S

\S

\s

匹配任何空白字符,包括空格、制表符、换页符等等(等价于[ \f\n\r\t\v])

不支持

不支持

\s

\s

\W

匹配任何非单词字符 (等价于[^A-Za-z0-9_])

\W

\W

\W

\W

\w

匹配包括下划线的任何单词字符(等价于[A-Za-z0-9_])

\w

\w

\w

\w

\B

匹配非单词边界,例如:'er\B' 能匹配 "verb" 中的'er',但不能匹配"never" 中的'er'

\B

\B

\B

\B

\b

匹配一个单词边界,也就是指单词和空格间的位置,例如: 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的'er'

\b

\b

\b

\b

\t

匹配一个横向制表符(等价于 \x09和 \cI)

不支持

不支持

\t

\t

\v

匹配一个垂直制表符(等价于 \x0b和 \cK)

不支持

不支持

\v

\v

\n

匹配一个换行符(等价于 \x0a 和\cJ)

不支持

不支持

\n

\n

\f

匹配一个换页符(等价于\x0c 和\cL)

不支持

不支持

\f

\f

\r

匹配一个回车符(等价于 \x0d 和\cM)

不支持

不支持

\r

\r

\\

匹配转义字符本身"\"

\\

\\

\\

\\

\cx

匹配由 x 指明的控制字符,例如:\cM匹配一个Control-M 或回车符,x 的值必须为A-Z 或 a-z 之一,否则,将 c 视为一个原义的 'c' 字符

不支持

不支持

\cx

\xn

匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长,例如:'\x41' 匹配 "A"。'\x041' 则等价于'\x04' & "1"。正则表达式中可以使用 ASCII 编码

不支持

不支持

\xn

\num

匹配 num,其中 num是一个正整数。表示对所获取的匹配的引用

不支持

\num

\num

[:alnum:]

匹配任何一个字母或数字([A-Za-z0-9]),例如:'[[:alnum:]] '

[:alnum:]

[:alnum:]

[:alnum:]

[:alnum:]

[:alpha:]

匹配任何一个字母([A-Za-z]), 例如:' [[:alpha:]] '

[:alpha:]

[:alpha:]

[:alpha:]

[:alpha:]

[:digit:]

匹配任何一个数字([0-9]),例如:'[[:digit:]] '

[:digit:]

[:digit:]

[:digit:]

[:digit:]

[:lower:]

匹配任何一个小写字母([a-z]), 例如:' [[:lower:]] '

[:lower:]

[:lower:]

[:lower:]

[:lower:]

[:upper:]

匹配任何一个大写字母([A-Z])

[:upper:]

[:upper:]

[:upper:]

[:upper:]

[:space:]

任何一个空白字符: 支持制表符、空格,例如:' [[:space:]] '

[:space:]

[:space:]

[:space:]

[:space:]

[:blank:]

空格和制表符(横向和纵向),例如:'[[:blank:]]'ó'[\s\t\v]'

[:blank:]

[:blank:]

[:blank:]

[:blank:]

[:graph:]

任何一个可以看得见的且可以打印的字符(注意:不包括空格和换行符等),例如:'[[:graph:]] '

[:graph:]

[:graph:]

[:graph:]

[:graph:]

[:print:]

任何一个可以打印的字符(注意:不包括:[:cntrl:]、字符串结束符'\0'、EOF 文件结束符(-1), 但包括空格符号),例如:'[[:print:]] '

[:print:]

[:print:]

[:print:]

[:print:]

[:cntrl:]

任何一个控制字符(ASCII 字符集中的前 32 个字符,即:用十进制表示为从 0 到31,例如:换行符、制表符等等),例如:' [[:cntrl:]]'

[:cntrl:]

[:cntrl:]

[:cntrl:]

[:cntrl:]

[:punct:]

任何一个标点符号(不包括:[:alnum:]、[:cntrl:]、[:space:]这些字符集)

[:punct:]

[:punct:]

[:punct:]

[:punct:]

[:xdigit:]

任何一个十六进制数(即:0-9,a-f,A-F)

[:xdigit:]

[:xdigit:]

[:xdigit:]

[:xdigit:]

四、三种不同类型正则表达式比较

注意: 当使用 BERs(基本正则表达式)时,必须在下列这些符号前加上转义字符('\'),屏蔽掉它们的 speical meaning  “?,+,|,{,},(,)” 这些字符,需要加入转义符号”\”

注意:修饰符用在正则表达式结尾,例如:/dog/i,其中 “ i “ 就是修饰符,它代表的含义就是:匹配时不区分大小写,那么修饰符有哪些呢?常见的修饰符如下:

g   全局匹配(即:一行上的每个出现,而不只是一行上的第一个出现)

s    把整个匹配串当作一行处理

m    多行匹配

i    忽略大小写

x    允许注释和空格的出现

U    非贪婪匹配

以上就是linux 常见3种类型正则表达式异同之处,整体了解这些,我相信在使用这些工具的时候,就可以更加清楚明晰了。相关阅读:

nodejs npm包管理的配置方法及常用命令介绍

整理的一些Linux运维工程师面试题

Java资源缓存 之 LruCache

C语言以数据块的形式读写文件实例代码

JQuery 图片滚动轮播示例代码

java读取PHP接口数据的实现方法

ASP.NET中常见文件类型、扩展名、存放位置及用途总结

smartcrop.js智能图片裁剪库

WinXP关机后自动重启故障是怎么回事

asp.net如何在图片上加水印文字具体实现

jQuery Validate表单验证插件 添加class属性形式的校验

sqlserver锁表、解锁、查看销表的方法

Win10升级安装修改注册表完成系统语言限制的技巧

js实现将选中内容分享到新浪或腾讯微博

linux php preg扩展,PHP_linux shell 正则表达式(BREs,EREs,PREs)差异比较,在计算机科学中,是指一个用 - phpStudy...相关推荐

  1. 经典:linux shell 正则表达式(BREs,EREs,PREs)差异比较

    转载:http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html 正则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句 ...

  2. 【转】linux shell 正则表达式(BREs,EREs,PREs)差异比较

    我想各位也和我一样,再linux下使用grep,egrep, awk , sed, vi的搜索时,会经常搞不太清楚,哪此特殊字符得使用转义字符'\' ..   哪些不需要, grep与egrep的差异 ...

  3. [转]linux shell 正则表达式(BREs,EREs,PREs)差异比较

    参见: http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html

  4. 正则表达式(BREs,EREs,PREs)差异比较

    我想各位也和我一样,再linux下使用grep,egrep, awk , sed, vi的搜索时,会经常搞不太清楚,哪此特殊字符得使用转义字符'\' ..   哪些不需要, grep与egrep的差异 ...

  5. UNIT07 BREs EREs PREs

    正则表达式是一个包含运算符和运算字符串的表达式,用来匹配特定规则的文本正则表达式简称为表达式.匹配模式或者模式,它们可以互换.Shell的正则表达式与grep.sed.Awk是不同的. 一.正则分类 ...

  6. linux里面的perl脚本怎么调用函数,如何在我的Perl脚本中包含另一个文件的函数?...

    使用模块.查看 perldoc perlmod和 Exporter. 在文件Foo.pm package Foo; use strict; use warnings; use Exporter; ou ...

  7. linux shell 正则表达式

    linux shell 正则表达式比较 则表达式:在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那 ...

  8. shell正则表达式截取字符串_从CVE20208816聊聊shell参数扩展

    1.前言 最近偶然看到了Pi-hole <=4.3.2远程代码执行漏洞(CVE-2020-8816)相关的文章,漏洞成因不是很难,但是里面构造的Exp引起了我的兴趣.由于Pi-hole代码对命令 ...

  9. linux用shell写正则表达式,Linux命令行与Shell脚本编程大全-shell正则表达式

    本章内容: 定义正则表达式 了解基本正则表达式 扩展正则表达式 创建正则表达式 定义正则表达式 正则表达式是你定义的.Linux工具用来过滤文本的模式模板.正则表达式模式利用通配符来代表数据流中的一个 ...

最新文章

  1. ACL 2020 | 腾讯AI Lab解读三大前沿方向及入选的20篇论文
  2. hibernate逆向工程生成的实体映射需要修改
  3. 默认布局换行_自学整理 CSS Flex 布局
  4. 开始食用grpc(之一)
  5. ISAPI_Rewrite 规则说明
  6. java list 从0开始_Java从零开始学二十一(集合List接口)
  7. 计算机硬件系统组成说课稿,计算机的硬件组成说课稿
  8. Spring , Spring mybatis 配制文件 模板
  9. string 方法 java_String 的几个 方法。 (java)
  10. 在 Less 中写 IE 的css hack
  11. sin傅里叶变换公式_傅里叶变换公式(傅里叶变换常用公式)
  12. Java基础18 异常,Java面试题库
  13. 目标跟踪数据集整理(三)----GOT-10k
  14. QML QtLocation地图应用学习-5:实现自己的plugin加载瓦片地图
  15. 老友记第一季台词打印_老友记第一季第一集台词
  16. 幼儿园介绍信(15篇)
  17. 太酷了!用200个LED做一个智能手表(开源)
  18. EditText 里的属性
  19. 爬虫 - 收藏集 - 掘金
  20. HP-UX 11.31 安装RAC 添加共享磁盘的问题

热门文章

  1. nexus7 刷成kali linux,Nexus 6p 刷入Kali Linux Nethunter 2019.4方法
  2. 花卉识别python_基于深度学习的花卉识别系统设计与实现
  3. java验证字符是否为字母_Java程序检查字符是否为字母
  4. 北京邮电/北京航空航天大学上机题目
  5. 杭州/北京内推 | 阿里达摩院灵瞳实验室招聘研究型算法实习生(可转正)
  6. 腾讯云对象存储 COS 荣获对象存储领导力奖!!!
  7. PR字幕怎么去黑色背景
  8. php实现手机归属地的查询、,PHP实现查询手机归属地的方法详解
  9. R语言绘图、高清保存、以及颜色系统
  10. 深度学习目标检测---使用yolov5训练自己的数据集模型(Windows系统)