了解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