正则表达式
定义:
由一类特殊字符及文本字符所编写的模式,处理文档中的内容
其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,
类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符
通配符
通配符只用于匹配文件名、目录名等,不能用于匹配文件内容。通配符主要是为了方便用户对文件或者目录的描述
通配符的选项
“*”:匹配任意一个或多个字符
“?” :匹配任意一个字符,只能匹配单个不能匹配多个的
"[ ]" : 匹配范围内的任意字符 [ 0-9]、[a-z]
正则表达式的形式
1、基本正则表达式
2、扩展正则表达式
区别: 仅限写法上的区别,其他没有任何不同
基本正则表达式
字符匹配:元字符
相关符号:
1、" . "(点):匹配任意单字符
例如 : ls |grep "123\."
当“ . ”变成点,需要加“ \ ”
"\" :表示转义符,、\.就是一个点
2、():表示分组的意思,加"\" 例如“\(\)”就是表示括号本意
3、“ [ ] ” : 匹配指定范围内的任意单个字符
例如:[0-9]、[a-z]、[A-Z]
通配符 ls [0-9].txt
正则表达式:
" "引号引起来,否则会出现歧义
4、" [^] " : 取反,指定范围之外的
5、“[[ : space: ]]” :匹配空格,包括tab键也算、回车键出来的空格、换行出来的空格
6、[[:blank:]]空白字符(空格和tab键,)制表符
通配符和正则表达式
通配符不能完全表示和匹配大写和小写,正则表达式可以,所以一定要用正则表达式来匹配大小写
正则表达式:表达次数的表达式
1、“ * ”:表示匹配前面的字符任意次,0次也行,无数次也行有多少匹配多少,没有也行,贪婪模式
echo google |grep "go*gle"
2、“.* ” : 任意长度的任意字符,不包括0次,也就是匹配所有,至少要有1次
3、“\?” :匹配其前面的字符出现0次或1次,即:可有可无
4、“\+”:匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
5、“\{n\}” : 匹配前面的字符等于n次,精确匹配
n: 表示前面的字符出现的次数,正好等于才可以匹配,
\{m,n\}: 匹配前面的的字符最少M次,最多n次
\{,n\}: 匹配前面的字符,最多n次
\{n,\}匹配前面的字符最少n次,最多无穷
位置锚定
选项
^ :行首锚定, 用于模式的最左侧
例如:^ root : 以root为开头
$ :行尾锚定,用于模式的最右侧
sh^ : 以sh为结尾
^$ :空行,匹配空行,只有空行才能匹配,空格无法匹配
^[[:space:]]*$ :空白行
词首锚定和词尾锚定
词首锚定: \<或\b 词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
词尾锚定: \>或\b 词尾锚定,用于单词模式的右侧
与单词的位置有关,“\b”在左,从左往右,以什么为开头
匹配整个单词: \<root\>或\broot\b
分组:
1、“()”表示
echo abccc |grep “abc\{3\}”
匹配ab c3次 连续出现的3次
补充:
完整匹配:
\{n\}:表示正好出现几次,n次前面的字符,必须连续出现,才能匹配
\{,n\} : 表示你只要出现,n次都算,除非没有
2、“ \ |”
表示逻辑或,
echo 1abc | grep "1\|2"
扩展正则表达式
命令:
(把前面的“\”全部取消就是正则表达式)
但是必须是:grep -E 或egrep
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{n} 匹配n次
{m,n} 至少m,至多n次
{,n} #匹配前面的字符至多n次,<=n,n可以为0
{n,} #匹配前面的字符至少n次,<=n,n可以为0