06、shell正则表达式

正则表达式在某种语言中都会有,功能就是匹配符合您预期要求的字符串

shell正则表达式有两种:

基本正则表达式:BRE(基本正则表达式)

扩展正则表达式:ERE(扩展正则表达式),扩展的表达式有+,?,|和()

符号 描述 示例
匹配除换行符(\n)之外的任意字符

匹配123:

echo -e " 123 \n 456" | grep -E '1.3'

^ 匹配前面字符串开头

匹配以abc开头的行:

echo -e "abc \n nxyz" | grep -E  "^abc"

$ 匹配前面字符串结尾

匹配以xyz结尾的行:

echo  -e "abd \n nxyz" | grep -E "nyz$"

* 匹配前一个字符零个或多个

匹配x,xo和xoo:

echo -e "x \n xo \n xoo \n o \n oo"| grep "xo *"

x是必须的,批量了o零个或多个

+ 匹配前面字符1个或多个

匹配abc和abcc:

echo -e "abc \n abcc \n add" | grep -E 'ab+'

这样是匹配一个别数字:echo “113” | grep -E -o '[0-9]'

连续匹配多个数字:echo "113" | grep -E -o '[0-9]+'

? 匹配前面字符0个或1个

匹配ac或abc:

echo -e "ac \n abc \n add" | grep -E 'a?c'

[] 匹配中括号之中的任意一个字符

匹配a或c:

echo -e "a \n b \n c" | grep -E '[ac]'

[-。] 匹配中括号中范围内的任意一个字符

匹配所有字母:

echo -e "a \n b \n c" | grep -E '[a-z]'

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

匹配a或b:

echo -e "a \n b \n c \n z" | grep -E '[^cz]'

匹配末尾数字:echo“ abc:cde; 123” | grep -E'[^;] + $'

{n}或{n,} 匹配花括号前面的字符至少n个字符

匹配abc字符串(至少三个字符以上字符串)

echo -e " a \n abc \n c" | grep -E "[a-z]{3}"

{n,m} 匹配花括号前面的字符至少n个字符,最多m个字符

匹配12和123(不加便姐夫会匹配字符)

echo -e "1 \n 12 \n 123 \n 1234"| grep -E -w -o '[0-9]{2,3}'

\< 边界符,匹配字符串开始

匹配开始时123和1234:

echo -e "1 \n 12 \n 123 \n 1234"| grep -E -w "\<123"

\> 边界符,匹配字符串结束

匹配结束时1234:

echo -e " 1 \n 12 \n 123 \n 1234" | grep -E '4\>'

()

单元或组合:将小括号里面作为一个组合

\n 反向引用,n时数字,从1开始编号,表示引用第n个分组匹配的内容

匹配123a:

echo "123abc" | grep -E ([a-z0-9]{4})

匹配出现xo零次或多次:

echo -e "x \n xo \n xoo \n o \n oo" | grep -E "(xo)*"

|

匹配竖杠两边的任意一个

匹配12和123:

echo -e "1 \n 12 \n 123 \n 1234" | grep -E "12|123"

\ 转义符,将特殊符号转成原累积

匹配1.2 

1 \.2   否则112也会匹配到

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posix字符

描述

[:数字:] 等效[a-zA-Z0-9]
[:α:] 等效[a-zA-Z]
[:降低:] 等效[az]
[:上:] 等效[AZ]
[:数字:] 等效[0-9]
[:空间:] 匹配任意空白字符,等效[\ t \ n \ r \ f \ v]
[:图形:] 非空白字符
[:空白:] 空格与定位字符
[:cntrl:] 控制字符
[:打印:] 可显示的字符
[:punct:] 标点符号字符
[:xdigit:] 十六进制

示例:

echo -e“ 1 \ n12 \ n123 \ n1234a” | grep'[[:digit:]]'

在Shell下使用这些正则表达式处理文本最多的命令有以下几个工具:

命令

描述

grep 默认不支持扩展表达式,加-E选项开启ERE。如果不加-E使用花括号要加转义符\ {\}
egrep 支持基础和扩展表达式
awk 支持egrep所有的正则表达式
sed 默认不支持扩展表达式,加-r选项开启ERE。如果不加-r使用花括号要加转义符\ {\}

 

支持的特殊字符

描述

\ w 匹配任意数字和字母,等效[a-zA-Z0-9_]
\ W 与\ w相反,等效[^ a-zA-Z0-9_]
\ b 匹配字符串开始或结束,等效\ <和\>
\ s 匹配任意的空白字符
\ S 匹配非空白字符

 

 

空白符

描述

\ n 换行符
\ r 回车符
\ t 水平制表符
\ v 垂直制表符
\ 0 空值符
\ b 退后一格
posted @ 2020-03-14 10:34  流氓徐志摩  阅读(188)  评论(0)    收藏  举报