第七章 Shell正则表达式

正则表达式在每种语言中都会有,目的就是匹配符合你预期要求的字符串。

7.1 Shell正则表达式

基础正则表达式:BRE(basic regular express)

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

符号

描述

示例

. 匹配除换行符(n)之外的任意单个字符

匹配123:

echo -e "123n456" |grep -E 1.3

^ 匹配字符串开头

匹配以abc开头的行:

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

$ 匹配字符串结尾

匹配以xyz结尾的行:

echo -e "abcnxyz" |grep -E xyz$

* 匹配多个

匹配以w开头d结尾的字符串:

echo "hello world" |grep -E -o world

+ 匹配1个或多个

匹配abc和abcc:

echo -e "abcnabccnadd" |grep -E ab+

这样是匹配单个数字:echo "113" |grep -E -o [0-9]

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

匹配0个或1个

匹配ac或abc:

echo -e "acnabcnadd" |grep -E a?c

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

匹配a或c:

echo -e "anbnc" |grep -E [ac]

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

匹配所有字母:

echo -e "anbnc" |grep -E [a-z]

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

匹配a或b:

echo -e "anbnc" |grep -E [^c-z]

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

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

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

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

匹配12和123(不加边界符会匹配单个字符):

echo -e "1n12n123n1234" |grep -E -o <[0-9]{2,3}>

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

匹配开始是123和1234:

echo -e "1n12n123n1234" |grep -E <123

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

匹配结束是1234:

echo -e "1n12n123n1234" |grep -E 4>

( )

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

分组:匹配小括号中正则表达式或字符。n反向引用,n是数字,从1开始编号,表示引用第n个分组匹配的内容

单元:匹配123a字符串

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

分组:匹配11

echo "113abc" |grep -E -o (1)1

| 匹配竖杠两边的任意一个

匹配12和123:

echo -e "1n12n123n1234" |grep -E 12>|123>

转义符,将特殊符号转成原有意义 1.2,匹配1.2:1.2,否则112也会匹配到

Posix字符

描述

[:alnum:] 等效[a-zA-Z0-9]
[:alpha:] 等效[a-zA-Z]
[:lower:] 等效[a-z]
[:upper:] 等效[A-Z]
[:digit:] 等效[0-9]
[:space:] 匹配任意空白字符,等效[tnrfv]
[:graph:] 非空白字符
[:blank:] 空格与定位字符
[:cntrl:] 控制字符
[:print:] 可显示的字符
[:punct:] 标点符号字符
[:xdigit:] 十六进制

示例:

echo -e "1n12n123n1234a" |grep [[:digit:]]

博客地址:http://lizhenliang.blog.51cto.com

QQ群:Shell/Python运维开发群 323779636

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

命令

描述

grep 默认不支持扩展表达式,加-E选项开启ERE。使用花括号要加转义符{}
egrep 支持基础和扩展表达式
awk 使用花括号需要开启posix支持:--posix
sed 默认不支持扩展表达式,加-r选项开启ERE。使用花括号要加转义符{}或-r

sed/grep支持的特殊字符

描述

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

空白符

描述

n 换行符
r 回车符
t 水平制表符
v 垂直制表符
0 空值符
b 退后一格
  • 版权声明: 本文源自互联网, 于4周前,由整理发表,共 1754字。
  • 原文链接:点此查看原文