Linux正则表达式grep,egrep 及相应的正则表达式用法详解

一、正则表达式介绍:

所谓正则,又称正则表达式、正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);

2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

正则表达式的特点是:

1. 灵活性、逻辑性和功能性非常的强;

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

正则表达式的字符串表示方式按照严谨度的不同,分为基础正则表达式和扩展正则表达式。为了能够进一步了解正则表达式在文本处理中的应用,下面我们利用grep命令和egrep命令进行探讨。

grep命令:

grep [OPTIONS] PATTERN [FILE...]

--color : color有三个值供选择:never、always、auto。always和auto的区别就是,always会在任何情况下都给匹配字段加上颜色标记,当通过管道或重定向时就会多出一些控制字符;而auto则只在输出到终端时才加上颜色。

-o:只显示被模式匹配到的内容

-i:搜索时不区分字符大小写;

-v:显示不能够被模式匹配到的行;取反;

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

-A # :显示匹配到的内容后面多少行

-B # : 显示匹配到的内容前面多少行

-C # : 显示匹配到的内容前后多少行

Grep常用选项介绍:

--color:让匹配到的字符用颜色显示出来;

检索/etc/passwd文件中包含root字符的文件,然后用颜色显示匹配到的字符

给grep命令做了命令别名,这样以后就不用每次加上--color参数了;

-o:只显示被模式匹配到的内容

检索/etc/passwd 里面是否有centos用户,如果加上-o 选项,只显示匹配到的行;

-i:搜索时不区分字符大小写;

检索/etc/fstab中包含"uuid"的小写字符串,最后找的的结果都是大写字符的行,不区分大小写

-v:显示不能够被模式匹配到的行;取反;

检索/etc/init.d 所有包含#号的行;加上-v后,就是取反,只显示不包括#号的行;

-A # :显示匹配到的内容后面多少行,#号可以是任意数字;

检索/etc/inittab 带0的行,加上"-A 2"后就多显示了后面的2行的内容;

-B # : 显示匹配到的内容前面多少行

检索/etc/inittab 带0的行,加上"-B 2"后就多显示前面的2行的内容;

-C # : 显示匹配到的内容前后多少行

检索/etc/inittab 带0的行,加上"-B 2"后就多显示前面和后面各2行的内容;

-E:使用扩展的正则表达式,表示方法 egrep 或者 grep -E ;

基本正则表达式元字符:

字符匹配:

. :匹配任意单个字符

检索/etc/passwd 包含r..t的字符,  .  可以匹配任意单个字符; 这里的..匹配2个任意字符;

  [ ]:匹配指定范围内的任意单个字符

检索/etc/rc.d/rc.sysinit 中包含N或小n的字符后面跟了任意2个字符的字符串;用-o只显示匹配到的字符串

[[:digit:]]:匹配任意一个数字;[0-9]

[[:lower:]]:匹配任意一个小写字母;[a-z]

[[:upper:]]:匹配任意一个大写字母;[A-Z]

[[:space:]]:匹配任意一个空白字符,制表符,空格和tab键;

[[:punct:]]:匹配任意一个标点符号;

[[:alnum:]]:匹配任意一个字母或数字;[0-9a-zA-Z]

[[:alpha:]]:匹配任意一个字母;[a-zA-Z]

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

次数匹配:在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数;工作于贪婪模式

*:匹配其前一个字符的任意长度,表示0次、1次或多次;处于贪婪模式,有多少个都显示出来;

.* : 任意长度的任意字符;

只要包含ab开头的行都显示出来;

\?:0次或1次;表示其左侧字符可有可无;

\+ : 1次或多次,前左边这个字符至少出现一次;

\{m\}:精确匹配m次,表示其左侧字符精确出现m次;

\{m,n\}:至少m次,至多n次;

\{0,n\}:至多n次

\{m,\} : 至少m次

位置锚定:

^:锚定行首

$:锚定行尾

^$ :匹配空白行;

^:锚定行首

检索/etc/passwd 匹配不是r开头后面跟了任意3个字符的字符串;

$:锚定行尾

检索/etc/passwd 行尾是bash的字段;

^$ :匹配空白行;

检索test3中包含空白的行; -v 是取反,找到那些不是空白的行;

单词锚定:由非特殊字符组成的连续的字符;

锚定词首:\<  ,也可用\b  ;

检索/etc/passwd 中,以root为词首的行; \>可以替换成为\b

锚定词尾: \> , 也可用\b  ;

检索/etc/passwd 中,以nologin为词尾的行; \>可以替换成为\b

\<PATTERN\>:匹配PATTERN能匹配到的整个单词;

检索ifconfig 命令中 匹配2个数字的词;

分组:\(\)

注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可用被grep记忆(保存于内置的变量中,这些变量是\1,\2,...);因此,还可用被引用;

\1:引用,模式中自左而右,由第一个左括号以及与之对应的右括号中的匹配到的内容;

\2:引用,模式中自左而右,由第二个左括号以及与之对应的右括号中的匹配到的内容;

"\(a.b\).*\1"  amb hello anb :是不能不能被匹配;要和匹配到括号的内容一样;

新建一个文档/tmp/test0 把一下内容写入;

test testr

toot ttttttot

tttt tttttt

"\(t..t\).*\1"  有用括号中匹配到的字符串;括号是什么内容,后面必须也包含;

二、扩展表达式:

扩展正则表达式的表示方法:grep -E 或者 egrep ;这两钟方式表达都可以;扩展正则表达式和基本正则表达式基本的表示方法都一样,就是不用转意字符了"\",然后只多了一个或者 | 。

字符匹配:

. :匹配任意单个字符

[]:匹配指定范围内的任意单个字符

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

[0-9],[[:digit:]]

[a-z],[[:lower:]]

[A-Z],[[:upper:]]

[[:space:]]

[[:punct:]]

[0-9a-zA-Z],[[:alnum:]]

[a-zA-Z],[[:alpha:]]

次数匹配:

*:任意长度,表示0次、1次或多次;

.*:任意长度的任意字符

?:0次或1次;表示其左侧字符可有可恶

+ :1次或多次,前左边这个字符至少出现一次;

{m}:精确匹配m次,表示其左侧字符精确出现m次;

{m,n}:至少m次,至多n次;

{0,n}:至多n次

{m,}: 至少m次

位置锚定:^:行首锚定;$:行尾锚定;\<,\b:词首锚定;\>,\b: 词尾锚定

分组表示:(),\1,\2

或者:a|b:a或者b  或者是匹配两侧的所有内容;

检索/tmp/test3 中以C或c开头pu结尾的词;可以用egrep和grep -E两种表示方法来表示;

扩展正则表达式的表示方法:

例子:

正则表达式的方法:

检索/etc/passwd文件中的二位或三位的数;

扩展正则表达式的方法:

检索/etc/passwd文件中的二位或三位的数;和正则表达式相比就是少了转意符;还可以用

# egrep ‘\<[0-9]{2,3}\>‘ /etc/passwd 来表示;这里的单词锚定符是不能去掉转意符的。

fgrep:

 fgrep命令等同于grep -F,它利用固定的字符串来对文本进行搜索,但不支持正则表达式的引用,所以此命令的执行速度也最快。

PS:这是本人学习时整理的资料,有的是在网上搜索到的内容;如果遗漏欢迎大家来指导。

时间: 2024-10-09 19:29:52

Linux正则表达式grep,egrep 及相应的正则表达式用法详解的相关文章

通配符和正则表达式-grep,egrep,fgrep

通配符和正则表达式-grep,egrep,fgrep 通配符和正则表达式,通配符用于文件名匹配,命令支持ls,cp,rm等;正则为通用匹配,命令支持grep,awk,sed,vi,find等.文本过滤工具grep,egrep,fgrep 通配符 *  匹配零个或多个任意字符 ?  匹配单个任意字符 [] 匹配指定范围内的一个字符,[]括号中的 字符间隔符 可以省略,如,\=:等等.举例[1:2=3,5\7] = [12357],也推荐使用这种省略写法作为标准 ^  取反,表示非.注意:非数字即包

Linux学习之正则表达式&grep&egrep

我们经常需要在文档中搜索符合自己要求的内容,这些部分可能分散在文档的各个位置,各个角落.可以利用关键字例如/keyword或者?keyword一个一个的搜索,还有我可能不止想搜索关键字,而是指定一个范围,怎样操作?而且怎样把这些搜索到的内容集中地显示出来?使用正则表达式搜索字串的grep命令和egrep命令就可以满足我们的这个要求. 正则表达式(Regular Expression)是一种字符书写的模式,以行为单位进行字符的处理,透过一些特殊字符的辅助,利用这种模式可以轻易地达到对字符的搜索.删

Linux 命令grep, egrep,正则表达式大全

Linux grep 命令     Linux系统中grep,egrep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本. 2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本. 3.fgrep : 快速grep,这个版

grep, egrep及相应的正则表达式用法详解

grep, egrep及相应的正则表达式用法详解 一.grep/egrep Global search REgular expression and Print out的简写,是一种强大的文本搜索工具,它根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,并把匹配的行打印出来.Unix的grep家族包括grep.egrep和fgrep. linux使用GNU版本的grep.它功能更强,可以通过-E.-F命令行选项来使用egrep和fgrep的功能(fgrep不使用

grep用法详解 grep与正则表达式

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 主要参数    [options]主要参数:    -c:只输出匹配行的计数.    -I:不区分大 小写(只适用于单字符).    -h:查询多文件时不显示文件名.    -l:查询多文件时只输出包含匹配字符的文件名.    -n:显示匹配行及 行号.    -s

(转)linux 中特殊符号用法详解

linux 中特殊符号用法详解 原文:https://www.cnblogs.com/lidabo/p/4323979.html # 井号 (comments)#管理员  $普通用户 脚本中 #!/bin/bash   #!/bin/sh井号也常出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行. # This line is comments.echo "a = $a" # a = 0由于这个特性,当临时不想执行某行指令时,只需在该行开头加上 # 就

Linux上命令的使用格式和基础命令详解

一.Linux上命令的使用格式 命令行提示符详解: 用户通过终端的命令行接口来控制操作系统,登陆后如下: [[email protected] ~]# root: 当前登录的用户 @:分隔符 localhost: 当前主机的主机名,非完整格式:此处的完整格式为:localhost.localdomain [[email protected] ~]# hostname localhost.localdomain ~:用户当前所在的目录(current directory),也称为工作目录(work

Linux IO模式及 select、poll、epoll详解

注:本文是对众多博客的学习和总结,可能存在理解错误.请带着怀疑的眼光,同时如果有错误希望能指出. 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. 一 概念说明 在进行解释之前,首先要说明几个概念: - 用户空间和内核空间 - 进程切换 - 进程的阻塞 - 文件描述符 - 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32

linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)

linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至: linux dd命令使用详解 dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, xm=number m if=file 输入文件名,缺省为标准输入. of=file 输出文件名,缺省为标准输出. ibs=bytes 一次读入 bytes 个字节(即一个块大小为 bytes 个字节). obs=b