首先介绍下正则表达式,它是由一串字符和元字符构成的字符串,简称RE(Regular Expression),它的主要功能是文本查询和字符串操作,它可以匹配一个文本的字符和字符集,达到数据过滤的效果。
字符分为普通字符和元字符两种。普通字符,例如a、b、1、2等,元字符,例如*、^、[]等,以下是各个元字符代表的含义:
元字符 | 含义 |
* | 0个或多个在*之前的普通字符(hel*o) |
. | 任意匹配字符(hell.) |
^ | 匹配行首,或后面字符的非(^Hello,以Hello开头) |
$ | 匹配行尾(bye$,以bye结尾;^$,空行;^.$,只匹配一个字符的行) |
[] | 匹配字符集([0-9]、[a-z]、[A-Z]、[^a-c]匹配非a-c范围的字符) |
\ | 匹配一个元字符的特殊含义(\.) |
\<\> | 精确匹配符号(\<the\>,精确匹配字符串the) |
\{n\} | 匹配全面字符出现n次(Jo\{3\}b,匹配字符串“Jooob”) |
\{n,\} | 匹配全面字符至少出现n次((Jo\{3,\}b,匹配字符串中的o至少出现3次)) |
\{n,m\} | 匹配全面字符出现n~m次(Jo\{3,6\},匹配字符串中的o出现次数在3-6之间) |
? | 匹配0个或1个它前面的字符(Jo?b,匹配的字符o出现0次或1次) |
+ | 匹配1个或多个它前面的字符(Jo+b,匹配的字符o至少出现一次) |
() | 通常结合|使用,re(a|o|e)d,匹配a、o、e中的任意一个字符 |
| | 用于连接多个正则表达式,也可作为管道符用 |
{} | 可以将多个正则表达式写入{}之间,可以匹配其中的任意表达式 |
例:
精确匹配:
[root@localhost Desktop]# grep -n '\<world\>' scripts/a.txt
2:echo "Hello world"
14:-----hello world `
15:Hello world
[root@localhost Desktop]# grep -w world scripts/a.txt
echo "Hello world"
-----hello world `
Hello world
或:
匹配规则“|”,需要与-E结合使用
[root@localhost Desktop]# grep -nE "java|jd" scripts/a.txt
8:/java/
13:www.jd.cn
POSIX字符
类名 | 含义 |
[:upper:] | 表示大写字母A-Z |
[:lower:] | 表示小写字母a-z |
[:digit:] | 表示阿拉伯数字0-9 |
[:alnum:] | 表示大小写字母或阿拉伯数字 |
[:space:] | 表示空格或Tab |
[:alpha:] | 表示大小写字母 |
例:[root@localhost Desktop]# grep -n [[:upper:]] scripts/a.txt
2:echo "Hello world"
15:Hello world
16:I am Spal