没有所谓的捷径
一切都是时间最平凡的累积

正则表达式与shell通配符

本文最后更新:2019年1月24日,已超过1911天未更新,如果文章内容失效,请留言反馈本站。

一、何为正则表达式

正则表达式是自定义的,linux文本工具(如grep,sed)用来过滤文本的模式模板,linux工具能够在数据流向工具时对数据进行正则表达式模式匹配,数据能匹配模式则会被接受进行下一步处理(如显示、删除、替代等)。正则表达式在shell和linux中的地位非常重要,透过正则表达式强大的字符串处理能力,我们可以从大量的数据中快速检索出仅符合需要的数据进行分析,由此给工作带来极大的便利

二、正则表达式的分类

正则表达式包括基本正则表达式(basic regular expression,简称BRE)和扩展正则表达式(ERE)两类,扩展正则表达式除了可以做简单的一组字串处理之外,还可以做群组的字串处理,如搜索china或america或england的搜索。大多数linux工具都至少符合基本正则表达式的规范。

三、正则表达式的语法

1、特殊字符

.:匹配任意单个字符

[ ]:匹配指定范围内的任意单个字符

[:alnum:]:代表英文大小写字符及数字,即a-z,A-Z,0-9

[:alpha:]:代表英文大小写字符,即a-z,A-Z

[:upper:]:代表英文大写字符,即A-Z

[:lower:]:代表英文小写字符,即a-z

[:digit:]:代表数字,即0-9

[:space:]:代表空白字符

[:punct:]:所有的标点符号

[^]:匹配指定范围之外的任意单个字符,如[^0-9]或[^[:digit:]]表示数字之外的任意单个字符

*:表示它前面的字符可以出现任意次

 \?:表示它前面的字符可以出现1次或0次

\+:表示它前面的字符出现至少1次

\{m\}:表示它前面的字符要出现m次

\{m,n\}:表示它前面的字符出现至少m次,至多n次

\{m,\}:表示它前面的字符出现至少m次

\{0,n\}:表示它前面的字符出现至多n次

.*:表示任意长度的任意字符

2、位置锚定符

 ^:行首锚定,即要搜索的字串必须位于行首

$:行尾锚定

^$:空白行,同^[[:space:]]*$

\<:词首锚定(注:不包含特殊字符的连续字符组成的串叫“单词”)

\>:词尾锚定

3、分组和引用

\(\):分组,例如\(ab\)*表示ab可以出现任意次,分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用

注意:反斜线为转义字符

\#:引用第#个括号所匹配到的内容,而非模式本身。

例如 abcmnabc匹配\(ab\?c\).*\1,而abcmnac不匹配

4、扩展正则表达式的特殊说明

?:表示它前面的字符可以出现1次或0次(不同于基本正则表达式)

+:表示它前面的字符出现至少1次

{m}:精确匹配m次

{m,n}:至少m次,至多n次

{m,}:至少m次

{0,n}:至多n次

锚定符与基本正则表达式相同

分组:( )    引用:\#

或者:a|b,表示或者b。注意:conC|cat表示conC或者cat而非conCcat或者conccat

2、位置锚定符

 ^:行首锚定,即要搜索的字串必须位于行首

$:行尾锚定

^$:空白行,同^[[:space:]]*$

\<:词首锚定(注:不包含特殊字符的连续字符组成的串叫“单词”)

\>:词尾锚定

3、分组和引用

\(\):分组,例如\(ab\)*表示ab可以出现任意次,分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用

注意:反斜线为转义字符

\#:引用第#个括号所匹配到的内容,而非模式本身。

例如 abcmnabc匹配\(ab\?c\).*\1,而abcmnac不匹配

4、扩展正则表达式的特殊说明

?:表示它前面的字符可以出现1次或0次(不同于基本正则表达式)

+:表示它前面的字符出现至少1次

{m}:精确匹配m次

{m,n}:至少m次,至多n次

{m,}:至少m次

{0,n}:至多n次

锚定符与基本正则表达式相同

分组:( )    引用:\#

或者:a|b,表示或者b。注意:conC|cat表示conC或者cat而非conCcat或者conccat

四、grep及egrep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式对目标文件进行逐行搜索,并把匹配的行打印出来。egrep则是使用扩展正则表达式语法搜索文本的工具。

使用方法:grep [option]…… “PATTERN” FILE

常用选项:

-i:忽略字符大小写

-v:反向选取

-o:仅显示匹配的字串,而非字串所在的行

-q:静默模式

–color=auto:将搜索匹配到的字串标示颜色

-A#:after,除了显示匹配行之外,也显示匹配行的后#行

-B#:before,除了显示匹配行之外,也显示匹配行的前#行

-C#或-#:除了显示符合匹配到的行之外,也显示该行之前后的#行内容

-E:使用扩展正则表达式,相当于egrep

-n:在显示符合范本样式的那一行之前,标示出该行的编号

» 站长码字辛苦,有用点个赞吧,也可以打个
» 若转载请保留本文转自:豫章小站 » 《正则表达式与shell通配符》
» 本文链接地址:https://blog.mydns.vip/1421.html
» 如果喜欢可以: 点此订阅本站 有需要帮助,可以联系小站
赞(0) 打赏
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除,联系邮箱:contact@mydns.vip。文章观点不代表本站立场。本站原创内容未经允许不得转载,或转载时需注明出处:豫章小站 » 正则表达式与shell通配符
分享到: 更多 (0)

评论 抢沙发


  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

智慧源于勤奋,伟大出自平凡

没有所谓的捷径,一切都是时间最平凡的累积,今天所做的努力都是在为明天积蓄力量

联系我们赞助我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏