APP下载

Linux查询档案内容和字串之grep与egrep的区别

消息来源:baojiabao.com 作者: 发布时间:2024-05-29

报价宝综合消息Linux查询档案内容和字串之grep与egrep的区别

请关注本头条号,每天坚持更新原创干货技术文章。

如需学习视讯,请在微信搜寻公众号“智传网优”直接开始自助视讯学习

1. 前言

grep (global search regular expression_r(RE) and print out the line,全面搜寻正则表示式并把行打印出来)是一种强大的文字搜寻工具,它能使用正则表示式搜寻文字,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩充套件,支援更多的re元字元, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表示式中的元字元表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令列选项来使用egrep和fgrep的功能。

grep的工作方式是这样的,它在一个或多个档案中搜索字串模板。如果模板包括空格,则必须被引用,模板后的所有字串被看作档名。搜寻的结果被送到屏幕,不影响原档案内容。

grep可用于shell指令码,因为grep通过返回一个状态值来说明搜寻的状态,如果模板搜寻成功,则返回0,如果搜寻不成功,则返回1,如果搜寻的档案不存在,则返回2。我们利用这些返回值就可进行一些自动化的文字处理工作。

除了grep,还有以下文字查询工具:

egrep (extended grep) egrep是grep的扩充套件,支援更多的re正则表示式元字元,等同于grep -E。

fgrep (fixed grep) 就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表示式中的元字元表示回其自身的字面意义,不再特殊,等同于grep -F,相对于grep和egrep的执行速度最快。

在使用这些工具时,我们需要有一些基本的shell功底和熟悉正则表示式:

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

所谓元字元就是指那些在正则表示式中具有特殊意义的专用字元,可以用来规定其前导字元(即位于元字元前面的字元)在目标物件中的出现模式。

转义字元是这样一个字元,标志着在一个字元序列中出现在它之后的后续几个字符采取一种替代解释。转义字元是元字元(en:metacharacter)的一种特殊情况。通常,判定某字元是否为转义字元由上下文确定。转义字元即标志着转义序列开始的那个字元。

转义字元的英文为Escape character。原本是指ASCII中的十进位制27,十六进位制1D,八进位制033所定义的那个字元。对应于标准键盘左上角的ESC键。老式键盘如果没有ESC键,替代输入是“Ctrl+[”。在老式的计算机外设控制协议,ASCII码的十进位制27这个字元开始的一个字元序列,是外设的控制序列,不能按照这些字元的字面意义解释。后来,就把最初的狭义的Escape character的含义引申开来,在各种计算机语言与协议中,标志着一个转义序列开始的那个字元,都叫做Escape character。最常见的一个例子是C程式设计语言中,用反斜线字元“”作为转义字元,来表示那些不可打印的ASCII控制符。在URI协议中,转义字元是百分号“%”。

grep与egrep详解

2. grep命令选项

-?

同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

-b,--byte-offset

打印匹配行前面打印该行所在的块号码。

-c,--count

只打印匹配的行数,不显示匹配的内容。

-f File,--file=File

从档案中提取模板。空档案中包含0个模板,所以什么都不匹配。

-h,--no-filename

当搜寻多个档案时,不显示匹配档名字首。

-i,--ignore-case

忽略大小写差别。

-q,--quiet

取消显示,只返回退出状态。0则表示找到了匹配的行。

-l,--files-with-matches

打印匹配模板的档案清单。

-L,--files-without-match

打印不匹配模板的档案清单。

-n,--line-number

在匹配的行前面打印行号。

-s,--silent

不显示关于不存在或者无法读取档案的错误资讯。

-v,--revert-match

反检索,只显示不匹配的行。

-w,--word-regexp

如果被引用,就把表示式做为一个单词搜寻。

-V,--version

显示软件版本资讯。

3. grep实用案例

格式: grep [option] pattern filename 注意: pattern如果是表示式或者超过两个单词的, 需要用引号引用. 可以是单引号也可双引号, 区别是单引号无法引用变数而双引号可以.

要用好grep这个工具,其实就是要写好正则表示式,所以这里不对grep的所有功能进行例项讲解,只列几个例子,讲解一个正则表示式的写法。

[[email protected] ~]# ls -l | grep \'^a\'

通过管道过滤ls -l输出的内容,只显示以a开头的行。

[[email protected] ~]# grep \'test\' d*

显示所有以d开头的档案中包含test的行。

[[email protected] ~]# grep \'test\' aa bb cc

显示在aa,bb,cc档案中匹配test的行。

[[email protected] ~]# grep \'[a-z]{5}\' aa

显示所有包含每个字串至少有5个连续小写字元的字串的行。

[[email protected] ~]# grep \'w(es)t.*\' aa

如果west被匹配,则es就被储存到内存中,并标记为1,然后搜寻任意个字元(.),这些字元后面紧跟着另外一个es(),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成\'w(es)t.

2019-12-24 07:51:00

相关文章