正则表达式在某种语言中都会有,功能就是匹配符合您预期要求的字符串
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 | 退后一格 |