10.基本与扩展正则表达式

Posted 永远的红茶加白地兰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.基本与扩展正则表达式相关的知识,希望对你有一定的参考价值。

一.基本正则表达式

1.通配符与正则表达式

通配符

. 任意的字符

{ dadoaw} 里面任意的一个字符

[^xyz] 除了xyz外的所有字符

[^a-c] = [d-z] 除了a到c不止只有d到z,所有不等价,左边的远远超过右边的区间

[:upper:] 大写字母

[:digit:] 十进制数字,为0-9

功能:通配符是匹配文件的,看文件名里带什么符号

正则表达式:匹配字符(文本)的,也能对文件名进行处理

单词的范畴: 字母 数字 下划线

2.匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数

* 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* 任意长度的任意字符 ,相当于空串或连续或不连续的字符串
\\? 匹配其前面的字符0或1次,即:可有可无
\\+ 匹配其前面的字符至少1次,即:肯定有
\\{n\\} 匹配前面的字符n次
\\{m,n\\} 匹配前面的字符至少m次,至多n次
\\{,n\\} 匹配前面的字符至多n次
\\{n,\\} 匹配前面的字符至少n次

例:匹配ens33的ip地址

 [root@rocky ~]# ifconfig ens33 |grep -o \'[[:digit:]]\\{1,3\\}\\.[[:digit:]]\\{1,3\\}\\.[[:digit:]]\\{1,3\\}\\.[[:digit:]]\\{1,3\\}\'
10.0.0.159
255.255.255.0
10.0.0.255

 \\. 对点转义,转变它的原本含义,原来.在正则表达式里表示任意的一个字符,加上\\转义为一个普通的点.
//grep - o 仅显示匹配到的字符串
//grep -v   取反输出
//grep -w   过滤出的必须是一个单词
//[[:digit:]]\\{1,3\\}\\.[[:digit:]]\\{1,3\\}\\.[[:digit:]]\\{1,3\\}\\.[[:digit:]]\\{1,3\\}\'
十进制的数字匹配1到3位,也就是匹配任意1个1-3位数,然后以.为分隔符,连续匹配这样的(1-3位数)4次

3.位置锚定

^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\\< 或 \\b 词首锚定,用于单词模式的左侧   //单词范畴:字母  数字 下划线
\\> 或 \\b 词尾锚定,用于单词模式的右侧
\\<PATTERN\\> 匹配整个单词
单引号 \' \'

目的: 为了保护文字不被转换.除了他本身. 就是说除去单引号外, 在单引号内的所有文字都是原样输出.

例:显示出passwd中root出现在行首

[root@rocky ~]# grep \'^root\' /etc/passwd
root:x:0:0:root:/root:/bin/bash

4. 分组其它

分组:() 将一个或多个字符捆绑在一起,当作一个整体处理,如:\\(root\\)+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \\1,
\\2, \\3, ...
\\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
//不加分组()匹配的是3个c
[root@rocky ~]# echo abccc | grep \'abc\\{3\\}\'
abccc

//加分组()匹配的才是adc
[root@rocky ~]# echo abcabcabc | grep \'\\(abc\\)\\{3\\}\'

abcabcabc

5.或者

\\|  或者
[root@rocky ~]# echo a.txt b.txt c.txt |grep \'a\\|b\\.txt\'
a.txt b.txt c.txt   //a,b 红,匹配到了a,b

[root@rocky ~]# echo a.txt b.txt c.txt |grep \'\\(a\\|b\\|c\\)\\.txt\'<br/>a.txt b.txt c.txt //a ,b,c 全红,表示都匹配到了

例:过滤/etc/httpd/conf/http.conf 下所以带#的文件

grep -v \'^#\' /etc/httpd/conf/httpd.conf |grep -v \'^$\'
grep -v \'^#\\|^$\' /etc/httpd/conf/httpd.conf
grep -v \'^\\(#\\|$\\)\' /etc/httpd/conf/httpd.conf
grep "^[^#]" /etc/httpd/conf/httpd.conf  //过滤到行首不是#的其它文件

二. 扩展正则表达式

扩展正则表达式和基本正则表示式功能一样,但是写法简洁

-E 后才可以用扩展正则表达式

1.字符匹配原字符

. 任意单个字符<br/>[wang] 指定范围的字符<br/>[^wang] 不在指定范围的字符<br/>[:alnum:] 字母和数字<br/>[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z<br/>[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]<br/>[:upper:] 大写字母<br/>[:blank:] 空白字符(空格和制表符)<br/>[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)<br/>[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)<br/>[:digit:] 十进制数字<br/>[:xdigit:]十六进制数字<br/>[:graph:] 可打印的非空白字符<br/>[:print:] 可打印字符<br/>[:punct:] 标点符号

2.次数匹配

* 匹配前面字符任意次
  ? 0或1次
+ 1次或多次
  {n} 匹配n次
  {m,n} 至少m,至多n次

3.位置锚定

^ 行首
$ 行尾
\\<, \\b 语首
\\>, \\b 语尾

4.分组其它

() 分组
后向引用:\\1, \\2, ...
| 或者
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat

以上是关于10.基本与扩展正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

grep与正则表达式

Linux基础--grep与正则表达式

egrep 及扩展正则表达式

grep及扩展正则表达式

linux基础篇-12,grep正则表达式与扩展正则表达式

10-正则表达式-grep