06、shell正则表达式

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

shell正则表达式有两种:

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

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

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

匹配123:

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

^ 匹配前面字符串开头

匹配以abc开头的行:

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

$ 匹配前面字符串结尾

匹配以xyz结尾的行:

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

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

匹配x,xo和xoo:

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

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

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

匹配abc和abcc:

echo -e "abc abcc 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 abc add" | grep -E 'a?c'

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

匹配a或c:

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

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

匹配所有字母:

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

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

匹配a或b:

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

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

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

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

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

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

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

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

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

匹配开始时123和1234:

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

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

匹配结束时1234:

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

()

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

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

匹配123a:

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

匹配出现xo零次或多次:

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

|

匹配竖杠两边的任意一个

匹配12和123:

echo -e "1 12 123 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 退后一格
原文地址:https://www.cnblogs.com/hackerlin/p/12490854.html