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