不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

正则表达式

Posted on 2021-01-28 22:23  三年三班王小朋  阅读(77)  评论(0编辑  收藏  举报

正则表达式

REGEXP: Regular Expressions,由一些特殊字符和文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

程序支持:grep,sed,awk,vim,less,nginx,varnish等

分两类

基本正则表达式:BRE

扩展正则表达式:ERE

grep -E,egrep

正则表达式引擎:

采用不同算法,检查处理正则表达式的软件模块

PCRE(Perl Compatible Regular Expressions)

元字符分类:字符匹配、匹配次数、位置锚定、分组

man 7 regex

基本正则表达式字符

.  匹配任意单个字符

[] 匹配指定范围内的任意单个字符,实例[wang],[0-9],[a-z]

[^]匹配质地你那个范围外的任意单个字符

[:alnum:]字母和数字

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

[:lower:]小写字母    [:upper:]大写字母

[:blank:]空白字符(空格和制表符)

[:space:]水平和垂直的空白字符(比[:blank:]包含的范围广)

[:ctrl:]不可打印的控制字符(退格,删除,警铃。。。)

[:digit:]十进制数字[:xdigit:]十六进制数字

[:graph:]可打印的非空白字符

[:print:]可打印字符

[:punct:]标点符号

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的字数

*匹配前面的字符任意此,包括0次  贪婪模式:尽可能长的匹配

.*任意长度的任意字符

\?匹配其前面的字符0或1次

\+匹配其前面的字符0或1次

\{n\}匹配前面的字符n次

\{m,n\}匹配前面的字符至少m次,至多n次

\{,n\}匹配前面的字符至多n次

\{n,\}匹配前面的字符至少n次

位置锚定:定位出现的位置

^行首锚定,用于模式的最左侧

$行尾锚定,用于模式的最右侧

^PATTERN$用于模式匹配整行

^$空行

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

\< 或 \b 词首锚定 ,用于单词模式的左侧

\>或 \b  词尾锚定 ,用于单词模式的右侧

\<PATTERN\> 匹配整个单词

查看非空行

grep -v “^$” 

 

分组:\(\)将一个或多个字符捆绑在一起,当作一个整体处理,如:\(root\)\+

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量找哦你那个,这些变量的命名方式为:\1,\2,\3,...

\1  表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例:     \(string1\+\(string2\)*\)

\1:string1\+\(string2\)*

\2:string

后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身

或者:\

示例:a\b:a或b C\|cat: C或cat  \(C\|c\)at:Cat或cat

取出网卡ens32 ip地址

ifconfig ens32|grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"

 

egrep及扩展的正则表达式 

egrep= grep -E

egrep [OPTION] PATTERN [FILE...]

扩展正则表达式的元字符

字符匹配:

.          任意单个字符

[]         指定范围的字符

[^]       不再指定范围的字符 

次数匹配:

 *         匹配前面字符任意次

?        0或1此

+         一次或多次

{m}      匹配m次

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

位置锚定:

^        行首

$        行尾

\<,\b   语首

\>,\b   语尾

分组:

()    后向引用:\1,  \2,  ...

或者:

a|b         a或b

C|cat     C或cat

(C|c)      Cat或cat

取基名 basename

echo "/etc/rc.d/init.d/functions/"|grep -Eo ".*[^/]"|grep -Eo "[^/]+$"

 

取目录名 dirname

echo "/etc/rc.d/init.d/functions/"|grep -Eo ".*[^/]"|grep -Eo ".*/"

 取出0-255范围内的ip地址

ifconfig|grep -Eo "(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"