shell之正则表达式

一、正则表达式简介

正则表达式,也成为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。

许多程序设计语言都支持利用正则表达式进行字符串操作。

二、正则表达式可以做什么?

1)匹配邮箱、身份证号、手机号、银行卡号等;
2)匹配某些特定字符,做特定处理等;

三、第一类正则表达式

3.1 正则中普通常用的元字符

元字符 功能 备注
. 匹配除了换行符以外的任意单个字符
* 前导字符出现0次或连续多次
.* 任意长度字符 ab.*
^ 行首(以...开头) ^root
$ 行尾(以...结尾) bash$
^$ 空行
[] 匹配括号里任意单个字符或一组单个字符 [abc]
[^] 匹配不包含括号里任一单个字符或一组单个字符 [^abc]
[1] 匹配以括号里任意单个字符或一组单个字符开头 [2]
^[^] 匹配不以括号里任意单个字符或一组单个字符开头 ^[^abc]

3.2 正则中其他常用元字符

元字符 功能 备注
< 取单词的头
> 取单词的尾
< > 精确匹配
{n} 匹配前导字符连续出现n次
{n,} 匹配前导字符至少出现n次
{n,m} 匹配前导字符出现n次与m次之间
( ) 保存被匹配的字符
d 匹配数字(grep -P [0-9]
w 匹配字母数字下划线(grep -P [a-zA-Z0-9_]
s 匹配空格、制表符、换页符(grep -P [ ]

3.3 扩展正则常用元字符

扩展元字符 功能 备注
+ 匹配一个或多个前导字符 bo+ 匹配boo、 bo
? 匹配零个或一个前导字符 bo? 匹配b、 bo
| 匹配a或b
() 组字符(看成整体) (my|your)self:表示匹配myself或匹配yourself
{n} 前导字符重复n次
{n,} 前导字符重复至少n次
{n,m} 前导字符重复n到m次

3.4 第二类正则

表达式 功能 示例
[:alnum:] 字母与数字字符 [[:alnum:]]+
[:alpha:] 字母字符(包括大小写字母) [[:alpha:]]{4}
[:blank:] 空格与制表符 [[:blank:]]*
[:digit:] 数字 [[:digit:]]?
[:lower:] 小写字母 [[:lower:]]{4,}
[:upper:] 大写字母 [[:upper:]]+
[:punct:] 标点符号 [[:punct:]]
[:space:] 包括换行符,回车等在内的所有空白 [[:space:]]+

3.5 正则元字符一览表

元字符 功能 示例
* 前导字符出现0次或者连续多次 ab* abbbb
. 除了换行符以外,任意单个字符 ab. ab8 abu
.* 任意长度的字符 ab.* adfdfdf
[] 括号里的任意单个字符或一组单个字符 [abc][0-9][a-z]
[^] 不匹配括号里的任意单个字符或一组单个字符 [^abc]
[3] 匹配以括号里的任意单个字符开头 [4]
^[^] 不匹配以括号里的任意单个字符开头
^ 行的开头 ^root
$ 行的结尾 bash$
^$ 空行
{n}和{n} 前导字符连续出现n次 [0-9]{3}
{n,}和{n,} 前导字符至少出现n次 [a-z]{4,}
{n,m}和{n,m} 前导字符连续出现n-m次 go{2,4}
<> 精确匹配单词 <hello>
() 保留匹配到的字符 (hello)
+ 前导字符出现1次或者多次 [0-9]+
? 前导字符出现0次或者1次 go?
| ^root|^ftp
() 组字符 (hello|world)123
d perl内置正则 grep -P d+
w 匹配字母数字下划线

  1. ↩︎

  2. abc ↩︎

  3. ↩︎

  4. abc ↩︎

*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
原文地址:https://www.cnblogs.com/lvzhenjiang/p/14199006.html