文本三剑客之grep及正则表达式用法

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,与sed(文本过滤工具),awk(文本报告生成器)并称为Linux文本处理三剑客,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。

本节索引

一、文本三剑客之grep介绍

二、正则表达式的相关概念

三、基本正则表达式(BER)

四、拓展正则表达式(ERE)

五、正则表达式中的元字符与通配符的使用区别

 

timg_image&quality=80&size=b9999_10000&sec=1523187795674&di=cac36899b69d5639ae19

 

一、文本三剑客之grep介绍:

grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。

 

Linux文本处理三剑客:

grep:文本过滤工具

sed:文本编辑工具(传送门)

awk:Linux上的实现gawk,文本报告生成器(传送门)

 

grep基于行过滤的文本过滤工具

格式:

grep [OPTION]… PATTERN [FILE]…

option:

-v     显示不被匹配到的行

-i      忽略字符大小写

-n     添加匹配到的行的行号

-c     统计被匹配到的行数

-o     仅显示匹配到的字符

-q     静默模式

-A#   包含此匹配行和后#行

-B#   包含此匹配行和前#行

-C#   包含此匹配行和前后#行

-e     实现多个匹配字符的或者(or)关系 -e a -e b:a或b

-w    匹配整个单词,数字、字母、下划线都算单词一部分

-r      递归目录

-E     使用ERE,扩展的正则表达式

-F     相当于fgrep

 

grep工具之所以功能强大,是因为它支持正则表达式进行匹配,那什么又是正则表达式呢?

 

二.正则表达式的相关概念

1.正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。元字符使正则表达

式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符,可以用来规

定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

正则表达式(REGEXP):由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不

表示字符表面意义,而表示控制或通配功能

 

2.正则表达式与通配符的区别:通配符匹配的是文件名中的字符,不能匹配文件的文本内容的字符

串(详见前篇:带你认识Linux中的通配符),这时候就需要用到正则表达式。

 

 

3.正则表达式分两类:

基本正则表达式:BRE;只承认的元字符有^$.[]*其他字符识别为普通字符:\(\)需要转义

扩展正则表达式:ERE;则添加了(){}?+|等

grep -E,egrep

 

4.正则表达式引擎:

采用不同算法,检查处理正则表达式的软件模块

基于PCRE语言(逐渐没落)兼容的正则表达式

 

5.元字符分类:字符匹配、匹配次数、位置锚定、分组(帮助文档:man 7 regex)

 

三、基本正则表达式(BRE)的元字符介绍:

1.字符匹配:

.        匹配任意单个字符,放在[]中就表示点

[]      匹配括号内任意单个字符

[^]    匹配指定范围外的任意单个字符

[:alnum:] 任意一个字母和数字

[:alpha:]  任意一个字母

[:lower:]  任意一个小写字母

[:upper:]  任意一个大写字母

[:digit:]    任意一个数字

[:space:]  水平或垂直空白字符

[:punct:]  标点符号

注意:正则表达式使用字符集作为搜索条件时,一定要加双引号,如”[[:digit:]]”;否则正则表达式会将字符集作为一个个字符进行识别

转义符“\”使正则表达式中具有特殊含义的字符显示其本身,如\.只表示小数点

 

2.匹配次数(某个字符出现的次数)

*       匹配前面的字符任意次,包括0次(贪婪模式,尽可能长的匹配)

.*     任意长度的任意字符

\?   匹配前面的字符0或1次,可看做 \{0,1\}

\+     匹配前面的字符至少1次,可看做\{1,\}(可实现懒惰模式)

\{m\}        精确匹配前面的字符m次

\{m,\}   至少匹配前面的字符m次

\{,m\}      至多匹配前面的字符m次

\{m,n\}匹配前面的字符m到n次

 

3.位置锚定

^       行首锚定,用于模式最左侧

$       行尾锚定,用于模式最右侧

^$    表示空行

\<或\b     单词的词首锚定

\>或\b     单词的次尾锚定

\<word\> 匹配整个单词,同grep -w

 

4.分组

\(\)将一个或多个字符捆绑在一起,当做一个整体进行处理,如:\(root\)\+

分组括号中匹配到的内容会被正则表达式记录与内部变量中,这些变量命名方式

为:\1,\2,\3,…

\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

 

后向引用:\1表示的是前面匹配的结果而不是前面匹配的模式

例:echo rootxxrbbt|grep ‘\(r..t\).*\1’

\1代表root,而不是r..t

 

5.或者:\|

例:a\|b:a或b; C\|cat:C或cat \(C\|c\)at:Cat或cat

 

 

四、扩展正则表达式(ERE)元字符介绍:

egrep      同grep -E

扩展正则表达式(ERE)可理解为将基础正则表达式中的转义符全部去掉,其字符匹配与基础正则表达式(BRE)相同。

1.次数匹配:

*       匹配前面字符任意次

?    0或1次,可看做{0,1}

+       1次或多次.可看做{1,}

{m}  匹配m次

{m,n}        匹配m到n次

 

2.位置锚定:

^       行首

$       行尾

\<,\b        语首

\>,\b       语尾

 

3.分组:

()

后向引用:\1,\2,…

 

4.或者:

a|b  a或b

C|cat       C或cat

(C|c)at       Cat或cat

 

五、正则表达式中的元字符与通配符的区别

作用不同:通配符匹配的是文件名中的字符,而正则表达式匹配的是文件的文本内容的字符串;

两者之间有很多相同之处,也有不同点,其中:

1.正则表达式元字符与通配符代表意义不同的有:

通配符中:

* 表示任意长度的任意字符

? 表示任意一个单个字符

正则表达式:

*表示匹配前面的字符任意次

. 表示匹配任意一个单个字符

.*表示任意长度的任意字符

 

2.正则表达式元字符与通配符含义相似的有:

[]      匹配括号内任意单个字符

[^]    匹配指定范围外的任意单个字符

[:alnum:] 任意一个字母和数字

[:alpha:]  任意一个字母

[:lower:]  任意一个小写字母

[:upper:]  任意一个大写字母

[:digit:]    任意一个数字

[:space:]  水平或垂直空白字符

[:punct:]  标点符号

…等字符集

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95103

(6)
wangxczwangxcz
上一篇 2018-04-07
下一篇 2018-04-07

相关推荐

  • mysq数据库五

    主从级联复制;主主服务器的搭建;半同步和过滤;主从复制加密;mah高可用性;5实现galeracluster

    2018-06-15
  • 第六次作业

    简述osi七层模型和TCP/IP五层模型 OSI:是ISO(国际标准化组织)组织在1985年研究的网络互连模型。 OSI将网络定义为7层,每一层实现各自的功能和协议,并完成与相邻层的接口通信。 物理层: 这一层是指物理设备 数据链路层:这层通过帧封装进行传递 网络层: 通过ip寻址来建立两个节点之间的连接这一层就是我们经常说的IP协议层。IP协议是Inter…

    Linux笔记 2018-08-08
  • Shell脚本写的备份还原工具 –reset.sh

    reset.sh脚本分两个功能模块,备份模块和还原模块;
    备份:备份指定文件到当前目录,以备份时日期做为文件名
    还原模块:可选择性的还原指定时间的备份记录

    2018-04-14
  • 修改Centos7的网卡命名方式及网卡的相关配置

    修改主机名centos6vim /etc/sysconfig/network永久有效hostname newname 立即临时生效也可以存网关,但优先级低于网卡配置文件GATEWAY=**centos7 /etc/hostname修改主机名hostnamectl set-hostname newname修改主机名直接生效 /etc/hosts :添加域名对应…

    Linux笔记 2018-05-03
  • 小白加薪升职记之正则表达式基础

    正则表达式基础命令

    Linux笔记 2018-06-01
  • 磁盘及文件系统管理(一)

    简述磁盘及文件系统管理

    Linux笔记 2018-05-05

评论列表(1条)

  • M30-Alvin阿峰
    M30-Alvin阿峰 2018-04-16 11:33

    grep ‘^$’ f1 | wc -l
    grep -c ‘^$’ f1
    上面两个是等价写法