Linux-正则-Reg

注意: Linux 正则表达式

  1. Linux正则表达式一般以行为单位chuli
  2. 注意字符集 export LC_ALL=C
  3. 调整别名:alias grep ='grep --color=auto'   引号~~!!! 注意引号

一,基础正则第一波字符说明:

  1. ^word: 匹配以word开头的内容. vi/vim编辑器里^代表一行的开头
  2. word$: 匹配以word结尾的内容,vi/vim 编辑器理$代表一行的结尾
  3. ^$ :匹配空行

二,基础正则第二波字符说明:

  1.  . : 点号,有且仅有一个字符,只能代表任意一个字符()
  2. \. : 转义符号,让有着特殊身份意义的字符脱掉马甲,还原原型.
  3. * : 重复0次或多个前面的字符,例:o*, 匹配没有o,一个o,或者多个o  (注意空行不匹配)
  4. .* : 匹配所有字符.延伸 ^.* 以任意多个字符开头, .*$匹配所有.

三,基础正则第三波:

  1. [abc] : 匹配字符集合内的任意一个字符串[a-zA-Z],[0-9]
  2. [^abc] : 不包含a或者b或者c开头的,注意,中括号中的^ 意思是不包含
  3. a\{n,m\} : 重复n到m次,前一个重负的字符.如果用egrep /sed -r 可以去掉斜线. 转义大括号!!!!
  4. a\{n,\} : 至少重复n次,前一个重复的字符.如果用egrep /sed -r 可以去掉斜线. 转义大括号!!!!
  5. a\{n\} : 严格重复n次! 前一个重复的字符.如果用egrep /sed -r 可以去掉斜线. 转义大括号!!!!
  6. a\{,m\}:最多重复m次! 前一个重复的字符.如果用egrep /sed -r 可以去掉斜线. 转义大括号!!!!
  7. 注意: egrep/sed -r 可以去掉 大括号的转义字符, grep 用 -E 参数,或者直接使用 egrep

四,扩展的正则表达式 egrep

1) + :加号表示重复"1个或者1个以上" 前面的字符(* 代表0个或是多个)

2) ? :表示重复“0个或1个”前面的字符

3) | :表示同时过滤多个字符

4) ():表示分组过滤后向引用

 

 


 

基本组成部分

 

正则表达式的基本组成部分。

 

正则表达式

描述

示例

\

转义符,将特殊字符进行转义,忽略其特殊意义

a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义

^

匹配行首,awk中,^则是匹配字符串的开始

^tux匹配以tux开头的行

$

匹配行尾,awk中,$则是匹配字符串的结尾

tux$匹配以tux结尾的行

.

匹配除换行符\n之外的任意单个字符,awk则中可以

ab.匹配abc或bad,不可匹配abcd或abde,只能匹配单字符

[ ]

匹配包含在[字符]之中的任意一个字符

coo[kl]可以匹配cook或cool

[^ ]

匹配[^字符]之外的任意一个字符

123[^45]不可以匹配1234或1235,1236、1237都可以

[ - ]

匹配[]中指定范围内的任意一个字符,要写成递增

[0-9]可以匹配1、2或3等其中任意一个数字

?

匹配之前的项1次或者0次

colou?r可以匹配color或者colour,不能匹配colouur

+

匹配之前的项1次或者多次

sa-6+匹配sa-6、sa-666,不能匹配sa-

*

匹配之前的项0次或者多次

co*l匹配cl、col、cool、coool等

()

匹配表达式,创建一个用于匹配的子串

ma(tri)?匹配max或maxtrix

{ n }

匹配之前的项n次,n是可以为0的正整数

[0-9]{3}匹配任意一个三位数,可以扩展为[0-9][0-9][0-9]

{n,}

之前的项至少需要匹配n次

[0-9]{2,}匹配任意一个两位数或更多位数

{n,m}

指定之前的项至少匹配n次,最多匹配m次,n<=m

[0-9]{2,5}匹配从两位数到五位数之间的任意一个数字

|

交替匹配|两边的任意一项

ab(c|d)匹配abc或abd

 

扩展正则表达式

元字符作用
| 管道符,表示“或”,即匹配其中任何一个,”book|desk”将匹配”book”或”desk”
() 小括号,可以将正则字符和元字符或表达式进行组合,”(book|desk)s”将匹配”books”或”desks”
? 问号,匹配0个或1个前导表达式,如”a?”匹配其他字符串或a
\< 反斜杠+小于号,词首定位符, “\< abc”表示所有包含以”abc”开头的单词的行
\> 反斜杠+大于号,词尾定位符, “\>abc”表示所有包含以”abc”结尾的单词的行
- 减号,用于指明字符范围, “[a-c]”将匹配包含a、b和c中任意一个字符的字符串
+ 加号,匹配一个或多个前导表达式,相当于 expr{1,}

注:grep -E pattern file才能在pattern匹配扩展正则表达式

 

POSIX字符类

 

POSIX字符类是一个形如[:...:]的特殊元序列(meta sequence),他可以用于匹配特定的字符范围。

The Difference Between space and blank

POSIX regular expressions offer two classes of whitespace: [[:space:]] and [[:blank:]]:

  • [[:blank:]] means space and tab. This makes it similar to: [ \t].

  • [[:space:]], in addition to space and tab, includes newline, linefeed, formfeed, and vertical tab. This makes it similar to: [ \t\n\r\f\v].

A key advantage of using character classes is that they are safe for unicode fonts.

 

正则表达式

描述

示例

[:alnum:]

匹配任意一个字母或数字字符

[[:alnum:]]+

[:alpha:]

匹配任意一个字母字符(包括大小写字母)

[[:alpha:]]{4}

[:blank:]

空格与制表符(横向和纵向)

[[:blank:]]*

[:digit:]

匹配任意一个数字字符

[[:digit:]]?

[:lower:]

匹配小写字母

[[:lower:]]{5,}

[:upper:]

匹配大写字母

([[:upper:]]+)?

[:punct:]

匹配标点符号

[[:punct:]]

[:space:]

匹配一个包括换行符、回车等在内的所有空白符

[[:space:]]+

[:graph:]

匹配任何一个可以看得见的且可以打印的字符

[[:graph:]]

[:xdigit:]

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

[[:xdigit:]]+

[:cntrl:]

任何一个控制字符(ASCII字符集中的前32个字符)

[[:cntrl:]]

[:print:]

任何一个可以打印的字符

[[:print:]]

 

 

 

元字符

 

元字符(meta character)是一种Perl风格的正则表达式,只有一部分文本处理工具支持它,并不是所有的文本处理工具都支持。

 

正则表达式

描述

示例

\b

单词边界

\bcool\b 匹配cool,不匹配coolant

\B

非单词边界

cool\B 匹配coolant,不匹配cool

\d

单个数字字符

b\db 匹配b2b,不匹配bcb

\D

单个非数字字符

b\Db 匹配bcb,不匹配b2b

\w

单个单词字符(字母、数字与_)

\w 匹配1或a,不匹配&

\W

单个非单词字符

\W 匹配&,不匹配1或a

\n

换行符

\n 匹配一个新行

\s

单个空白字符

x\sx 匹配x x,不匹配xx

\S

单个非空白字符

x\S\x 匹配xkx,不匹配xx

\r

回车

\r 匹配回车

\t

横向制表符

\t 匹配一个横向制表符

\v

垂直制表符

\v 匹配一个垂直制表符

\f

换页符

\f 匹配一个换页符

 

 

 

本文出自 “一只小菜鸟” 博客,请务必保留此出处http://aresxin.blog.51cto.com/4734097/1602624

posted @ 2017-08-14 10:53  TimeTree  阅读(549)  评论(0编辑  收藏  举报