了解Linux正则表达式之前,需要了解Linux中通配符和正则的区别:通配符主要用于bash环境,而正则大多数用于Linux三剑客(grep、sed、awk)等中…且Linux中的正则又和其他开发环境下的正则有所区别,咱们暂时研究的还只是Linux环境下的正则…
通配符基础
通配符 | 描述 | 示例 |
* | 任意多个字符 | find . *.sh |
? | 代表任意一个字符 | find . ?.sh |
; | 连续不同命令分隔 | ls m1;ls m2 |
# | 配置文件注释 | ####crontab#### |
| | 管道符 | find . -type f -name "*.txt" | xargs rm -f |
~ | 用户的家目录 | oldboy~ |
- | 上一次操作目录 | su - |
$ | 变量符号 | $PATH |
/ | 根 | / |
> | 重定向 | echo “linux”>oldboy.sh |
>> | 追加重定向 | echo “linux”>>oldboy.sh |
< | 输入 | xargs –n 2 <oldboy.txt |
<< | 输入重定向 | xargs –n 2 <<oldboy.txt |
‘ | 单引号所见即所得 | echo ‘date’==>date |
“ | 双引号变量置换 | echo “date”==>date num=3 |
` | 相当于$() | ls ==>oldboy.sh
|
{] | 内容序列 | touch m{1..10} cp file{,.bak} |
! | 取反 | find . -type f ! -name "*.sh" |
&& | 并且 | && |
|| | 或者 | || |
正则表达式基础组成
正则表达式 | 描述 | 示例 |
^ | 匹配行首 | ^abc 匹配以abc开头的行 |
$ | 匹配结尾 | def$ 匹配以def结尾的行 |
. | 任意一个字符 | a.c 匹配abc、adc等 |
\ | 转义字符,还原字符本身含义 | \. 代表点本身 |
* | 重复0个或者多个前一个字符 | o* 代表0个o或者多个o |
.* | 任意字符 | ^.* 代表以任意字符开头 |
[abc] | 匹配字符集合里的任意一个字符 | [a-z][A-Z][0-9] 任意a-z,A-Z,0-9 |
[^abc] | 匹配不包含^后的所有字符 | [^abc] 不包含abc的所有字符 |
a\{n,m\} a\{n,\} a\{n\} | 匹配重复n到m次a字符 重复至少n次 只重复n次 | 0\{0,3\} 0重复了0-3次 0\{3,\}重复至少3次0 0\{3\}只重复3次0 |
() | 创建一个用于匹配的子串 | ma(tri)?匹配max或maxtrix |
扩展的正则表达式(grep –E 或者 egrep)
正则表达式 | 描述 | 示例 |
+ | 匹配1个或者多个 (*是0个或者多个) | a+ 匹配1个到多个a |
? | 匹配0个或者一个 (.是只有一个) | a? 匹配0个a或者1个a |
| | 同时过滤多个字符 | grep –E “3306|1521” /etc/services |
元字符
元字符(meta character)是一种Perl风格的正则表达式,只有一部分文本处理工具支持它,并不是所有的文本处理工具都支持。
正则表达式 | 描述 | 示例 |
\b | 单词边界 | \bcool\b 匹配cool,不匹配coolant |
\B | 非单词边界 | cool\B 匹配coolant,不匹配cool |
\d | 单个数字字符 | b\db 匹配b2b,不匹配bcb |
\D | 单个非数字字符 | b\Db 匹配bcb,不匹配b2b |
\w | 单个单词字符(字母、数字与_) | \w 匹配1或a,不匹配& |
\W | 单个非单词字符 | \W 匹配&,不匹配1或a |
\n | 换行符 | \n 匹配一个新行 |
\s | 单个空白字符 | x\sx 匹配x x,不匹配xx |
\S | 单个非空白字符 | x\S\x 匹配xkx,不匹配xx |
\r | 回车 | \r 匹配回车 |
\t | 横向制表符 | \t 匹配一个横向制表符 |
\v | 垂直制表符 | \v 匹配一个垂直制表符 |
\f | 换页符 | \f 匹配一个换页符 |
POSIX字符类
POSIX字符类是一个形如[:...:]的特殊元序列(meta sequence),他可以用于匹配特定的字符范围
正则表达式 | 描述 | 示例 |
[:alnum:] | 匹配任意一个字母或数字字符 | [[:alnum:]]+ |
[:alpha:] | 匹配任意一个字母字符(包括大小写字母) | [[:alpha:]]{4} |
[:blank:] | 空格与制表符(横向和纵向) | [[:blank:]]* |
[:digit:] | 匹配任意一个数字字符 | [[:digit:]]? |
[:lower:] | 匹配小写字母 | [[:lower:]]{5,} |
[:upper:] | 匹配大写字母 | ([[:upper:]]+)? |
[:punct:] | 匹配标点符号 | [[:punct:]] |
[:space:] | 匹配一个包括换行符、回车等在内的所有空白符 | [[:space:]]+ |
[:graph:] | 匹配任何一个可以看得见的且可以打印的字符 | [[:graph:]] |
[:xdigit:] | 任何一个十六进制数(即:0-9,a-f,A-F) | [[:xdigit:]]+ |
[:cntrl:] | 任何一个控制字符(ASCII字符集中的前32个字符) | [[:cntrl:]] |
[:print:] | 任何一个可以打印的字符 | [[:print:]] |
原文地址:http://lilongzi.blog.51cto.com/5519072/1769050