grep、正则表达式和扩展正则表达式的理解及运用

grep、正则表达式和扩展正则表达式的理解及运用

一 、grep的基本含义

我们可以从命令man grep中看到gerp命令的帮助文档,从中我们可以得出grep、egrep、fgrep都是文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的。

grep有三种变形:
   grep:标准grep命令,支持基本正则表达式
   egrep:扩展grep命令,支持基本及扩展的正则表达式
   fgrep:fastgrep,它把所有的字母都看作单词,即正则元字符不再特殊,而仅仅表示其自身的字母意思

grep使用语法格式为

grep [option]...‘PATTERN‘ FILE...

grep [选项] …’基本正则表达式’ [文件]…

使用双引号:字符串参数最好使用双引号扩起来,一是以防被误解为shell命令,二是可以用来查找多个单词组成的字符串,在调用变量的时候也要使用双引号,比如grep"$MYVAR",否则无结果,在调用模式匹配是,应使用单引号

grep常用选项

-v: 反向选取

-o:仅显示匹配的字串,而非字串所在的行

-i:ignore-case,忽略字符大小写

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

二、grep和正则表达式

正则表达式含义:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能。正则表达式中包含元字符,元字符是指不表示其字面意义,而用于额外功能性描述。

基本正则表达式的元字符:

字符匹配:

.: 匹配任意单个字符

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

[0-9], [[:digit:]]:指包含数字字符

[a-z], [[:lower:]]:指包含小写字符

[A-Z], [[:upper:]]:指包含大写字符

[[:space:]]:指空白字符

[[:punct:]]:指特殊字符 标点符号等

[[:alpha:]]:指包含所有的大小写字符

[[:alnum:]]:指包含所有的大小写字符和数字字符

[^]:匹配一个不在指定范围内的字符

次数匹配元字符:用于实现指定其前面的字符所能够出现的次数

*: 任意长度,它前面的字符可以出现任意次

\?:  0次或1次,它前面的字符是可有可无的

\{m\}: m次,它前的字符要出现m次

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

\{m,\}: 至少m次

位置锚定:

^:行首锚定:指写在模式最左侧

$:行尾锚定:指写在模式最右侧

^$:指空白行

不包含特殊字符的连续字符组成的串叫单词:

\<:词首,出现于单词左侧,\b

\>:词尾,出现于单词右侧, \b

分组引用:

\(\):分组

\#:  引用第n个 括号所匹配到的内容,而非模式本身

示例:

1、显示/etc/passwd中以nologin结尾的行

#   grep nologin$ /etc/passwd

使用此命令结果如下

2、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行

#  grep “[0-9]” /etc/inittab

三、扩展正则表达式

扩展正则表达式是对基础正则表达式添加了几个特殊构成的

语法格式:

 grep  -E  ‘表达式‘文件…

grep  -E ‘PATTERN‘ FILE...

       egrep ‘表达式‘ 文件…

egrep   ‘PATTERN‘ FILE...

扩展正则表达式的元字符:

字符匹配:

.: 匹配任意单个字符

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

[0-9], [[:digit:]]:指包含数字字符

[a-z], [[:lower:]]:指包含小写字符

[A-Z], [[:upper:]]:指包含大写字符

[[:space:]]:指空白字符

[[:punct:]]:指特殊字符 标点符号等

[[:alpha:]]:指包含所有的大小写字符

[[:alnum:]]:指包含所有的大小写字符和数字字符

[^]:匹配一个不在指定范围内的字符

次数匹配元字符:用于实现指定其前面的字符所能够出现的次数

*: 任意长度,它前面的字符可以出现任意次

\?:  0次或1次,它前面的字符是可有可无的

\{m\}: m次,它前的字符要出现m次

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

\{m,\}: 至少m次

位置锚定:

^:行首锚定:指写在模式最左侧

$:行尾锚定:指写在模式最右侧

^$:^$,^[[:space:]]*$ 指空白行

不包含特殊字符的连续字符组成的串叫单词:

\<:词首,出现于单词左侧\b

\>:词尾,出现于单词右侧\b

分组引用:

\(\):分组

\#:  引用第n个 括号所匹配到的内容,而非模式本身

或者:

|:表示或者

例:

A|B:A或者B

示例:

1、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行

#  grep -E "^[[:space:]]{1,}.*"/boot/grub/grub.conf

grep、正则表达式和扩展正则表达式的理解及运用

时间: 2025-01-04 06:51:29

grep、正则表达式和扩展正则表达式的理解及运用的相关文章

linux之grep基本及扩展正则表达式应用作业

Linux 培训8月27日作业 在8月27日的课程上,主要学习了关于grep命令的使用及其在基本正则表达式和扩展正则表达式下各元字符的具体应用. 1.总结本此课程中所涉及命令的使用方法及相关示例展示 本次课程所涉及的命令主要的有 grep它是一个文本过滤工具,它的作用是文本搜索工具,根据用户指定的"模式(pattern)"逐行去搜索目标文本,打印匹配到的行 这里面提到的模式很重要,模式按个人理解想理解它就需要先了解什么是元字符. 元字符:是一组特殊符号,但它们并不表示它们原来的字符意义

2015年8月27日课程作业(文件权限管理及grep正则和扩展正则表达式)-JY1506402-19+liuhui880818

学习内容:文件权限管理及grep正则和扩展正则表达式 系统环境:CentOS 6.7/7 x86_64 一.作业(练习)内容: 1.总结本此课程中所涉及命令的使用方法及相关示例展示: 2.总结基本正则表达式及扩展正则表达式 3.显示/etc/passwd文件中以bash结尾的行 4.显示/etc/passwd文件中的两位数或三位数 5.显示`netstat -tan`命令结果中以'LISTEN'后跟0个.1个或者多个空白字符结尾的行 6.添加用户bash.testbash.basher以及nol

OSIX基本正则表达式和扩展正则表达式的比较

POSIX基本正则表达式和扩展正则表达式的比较 在读者正觉得正则表达式已经复杂得不能再复杂时,又会发现POSIX规范将正则表达式的实现方法分为了两种:基本正则表达式(BRE)和扩展正则表达式(ERE).到目前为止,我们所讨论的正则表达式的所有特性,都得到了兼容POSIX的应用程序的支持,并且都是以BRE的方式实现.grep命令就是这样的一个例子. BRE和ERE到底有什么区别?其实仅仅是元字符的不同!在BRE方式中,只承认^ .$. . .[ .] .*这些是元字符,所有其他的字符都被识别为文字

正则表达式和扩展正则表达式

正则表达式和扩展正则表达式   先了解下基础概念:字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等.字符串是0个或更多个字符的序列.文本也就是文字,字符串.说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件.  正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.vim.grep.awk .sed 等工具都支持正则表达式,本文介绍如何使用grep及egrep命令.而扩展正则表达式

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

什么是正则表达式 通过符号.符号与字母数字的组合,来描述文本的特征.这些字符不代表字符原本的意义,而是表示控制和通配.这此符号和符号与字母的组合称为元字符. 为什么要用正则表达式,用在什么地方. 正则表达式可以匹配一段文本的特征,比如年月日,空白行,单词,一行文本,IP地址等.这样可以根据某些文本,然后查找到那些文件中包含了这些内容.还可以根据这些特征找到的文本进行复制,删除,替换,或者赋值给一个变量等.很多编程语言都支持正则表达式,它们可能支持的正则表达式引擎不同,表示方法略有不同.vi,gr

POSIX基本正则表达式和扩展正则表达式的比较

POSIX基本正则表达式和扩展正则表达式的比较 在读者正觉得正则表达式已经复杂得不能再复杂时,又会发现POSIX规范将正则表达式的实现方法分为了两种:基本正则表达式(BRE)和扩展正则表 达式(ERE).到目前为止,我们所讨论的正则表达式的所有特性,都得到了兼容POSIX的应用程序的支持,并且都是以BRE的方式实现.grep命令就 是这样的一个例子. BRE和ERE到底有什么区别?其实仅仅是元字符的不同!在BRE方式中,只承认^ .$. . .[ .] .*这些是元字符,所有其他的字符都被识别为

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

################################################ 基本正则表达式:grep 使用正则表达式定义的模式来过滤文本 grep -i :不区分大小写 --color -v:显示没被匹配的任意行 -o:只显示被匹配的字符串 -E 扩展的正是表达式 =egerp -A#:#为数字 -B#: -C#: [[email protected] testcp]# grep -o 'root' /etc/passwd --color root root root ro

正则表达式与扩展正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.通常被用来检索.替换那些符合某个模式(规则)的文本.其主要应用对象是文本,因此它在各种文本编辑器场合都有应用. 贪婪模式与懒惰模式 正则表达式默认的情况下,会在满足匹配条件下尽可能的匹配更多内容.如 a.*b,用他来匹配 aabab ,它会匹配整个 aabab ,而不会只匹配到 aab 为止,这就是贪

Linux下元字符、正则表达式、扩展正则表达式应用

Linux下通配符  常用来搜索文件ls,find 符号        意义 *           代表任意长度的任意字符 ?           代表任意单个字符 []          代表指定范围内的任意单个字符 [-]         如[a-z]代表a-z内的任意单个字符 [^]         指定范围外的任意单个字符 Linux下元字符 #     注释符号,常使用在脚本当中 \     转义字符,将"元字符或通配符"还原成一般字符, |     管道,可以将管道左边的