Linux 系统中文本处理“三剑客”之grep

我们写脚本的时候,经常要截取命令输出的某项数据,比如:我要知道主机上有多少块硬盘

这是很方便的。使用grep搜索出我们想要的数据再使用 sed 、或 cup 切割就可以取得我们主机的设备名称了,这是我们取数据的一种方法。

Egreq 是grep 的升级版,支持扩展表达式、fgrep不支持正则表达式。

使用格式:


1

2

3

4

5

grep [OPTIONS] PATTERN [FILE...]

     -o     只打印输出匹配到字符串

     -i      做匹配时候忽略大小写

     -v      打印输出不匹配的内容

     -E      表示支持扩展表达式

【grep】是文本搜索工具,逐行读入文本,按照给定的模式(pattern)做匹配,查看行中的单词/字符是否与“模式”相匹配。默认匹配到的行会输出到监视器。

程序一般有数据的输入和输出,也称为程序的IO。从这个角度来分析,grep 程序数据的输入可以是文件(从磁盘中读取数据)或从标准输入(也就是它可以使用管道作为grep 的数据输入的。)

使用【grep】命令的时候,不指定文件,它就从标准输入读取数据了。

【grep】默认是把匹配到模式的行输出到标准输出的。

Grep 是文本搜索工具,只处理文本。所以,我们在做查找目录文件的时候,先要使用【ls】把目录中的内容列出来,再使用 grep 做文本搜索处理。

目录文件搜索,使用 Bash shell 中的元字符。

简单地了解下,文件通配与正则表达式的区别?

列出 /etc 目录中以 .conf 或 .d 结尾的文件。

是做字符(串)的匹配呢,还是做单词的匹配呢?

加上词尾锚定后,只有单词的词尾与给定的“模式”匹配,grep 才会获取到。如果单词的

中间或前面与“模式”匹配,grep 不会显示出来。

如下述匹配模式加上词尾锚定后,不会显示aliases.db 文件了。

总结:

使用【grep】的时候,要注意:文件的通配符和正则表式的元字符有很多看似一样,但它们表示的特殊意义是不尽相同的。很容易混淆的。

使用【grep】搜索文本的时候,分析思路总结:

1、  分析匹配的内容

是做单词匹配呢、还是做字符(串)匹配呢。

A、如果匹配的内容是单词的话,需要使用词首锚定符(\<)和词尾锚定符(\>)标识写         在模式中的字串不是字符串而是单词。

B、如果匹配的内容是字符(串)的话,就直接把匹配内容做为grep匹配模式就可以了。

也就是字符串搜索。

2、  确定匹配的位置

是行首还是行尾、词首、还是词尾、还是任意位置

A、正则表达式提供了一些元字符来表示:在一行文本中要匹配的位置。

如:行首锚定符(^)、行尾锚定符($)、词首锚定符(\<)、词尾锚定符(\>) 这些都统称为锚(目标点)。

B、如果,正则表达式中没有这些锚定符的话,正则表达式在一行文本中要匹配的位置就是字符(串)。

3、是否要修饰匹配内容呢?

它们用于展开或缩小(即是修改了)正则表达式匹配文本行的范围。修饰符包括了星号(*)、括号()、

反斜杠符号、问号。这些都可以称为修饰符。是用来修饰匹配内容的。

既然我们的匹配内容,分为单词和字符,则有必要了解一下,在grep中何为单词?

理解grep 中所谓的单词对于我们熟悉运用该命令来做文本搜索很有帮助。

对【grep】的定义的单词的理解

Grep 对单词的定义:

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

如上图所示,我们使用【grep】搜索文本b.txt 中的单词save。就可以很好地知道,在 grep 世界中,所谓的“单词”是什么。图中显示红色的就是save单词。

“连续”指的是:字符串间没有空格,且字符串没有特殊字符(中括号,大括号,问号等)。也可以说特殊字符是单词的分界。

那么,在实现应用中如何使用【grep】搜索文本找出我们需要的内容呢?

1、【grep】对字符的匹配。

分析:做匹配的位置是否有要求?        无

找出包含字符s的行              不需要修改。

所以,我们的可以写成:grep “s”  FILE

正则表达式在一行文本中要匹配的位置是字符。所以会拿文本行的每一个字符都做正则表达式匹配。

Grep 命令读取一行,行中的每个字符都与“模式”做匹配动作。

如果匹配了就显示高亮显示匹配到的字符。如下图所示。

例:找出文件a.txt中ab字符中出现一个或零个s字符的行

匹配内容是字符,所以不需要词首锚定符和词尾锚定符标识。

匹配的位置无要求,所以不需要使用位置锚定符。

匹配内容ab间的s字符无法确定所以要使用修饰符(?)。

问号(?),修饰符:表示前面的字符出现的次数为0次或1次。如下图所示:

分析,我们做字符匹配,grep 拿来与给定模式做匹配的就不是单词了,而是字符。

在这里,grep 读取每一个字符就与模式做匹配操作。看看读取到的字符是不是 a ,如果是字符 a 就判断 a 字符后是一个或没有字符 s ,如果 a 字符后面符合特殊字符(\?)的要求,而取得的下一个字符又是字符 b ,就代表刚才读取字符 a至字符 b, 这间这段字符串与给定的模式相匹配了。

2、【grep】做单词匹配。

找出包含单词save的行。

分析:

匹配的内容是“单词”,所以要使用词首锚定符和词尾锚定符标识。

匹配的位置无要求,所以不需要使用位置锚定符。

正则表达式在一行文本中要匹配的位置为单词。无论是“词首锚定”还是“词尾锚定”。很显然,grep 每次取一个“单词”与“模式”做匹配,匹配到的就高亮显示正则表达式,

使用“词首锚定符\<”和“词尾锚定符\>”标识一个单词的。

3、【grep】做行匹配. 正则表达式在一行文本中要匹配的位置为行尾或行首。

我们的匹配有“单词匹配”和“字符匹配”,所以我们指定的条件可以为:

A、以某个字符开头的行

B、以某个字符结尾的行

 C、以某个单词开头的行

 D、以某个单词结尾的行

分析,上图所示。找出,以单词 save 打头的行。

第一步,先匹匹配到包含单词 save 的行。

第二步,使用“行首锚定符 ^”告诉 grep 我们做的是行匹配的操作,所以

第二次使用 grep 做文本搜索的时候,只会显示以单词 save 开头的行。

注意:

我们使用 grep 做文本搜索的时候,要特别注意空白,特别是在行尾。如下图所示:

第一次使用 grep 搜索的时候没有匹配到什么行。

第二次假设 字符串 LISTEN 后面跟有空格再换行,就搜索到匹配的行了。

如何将快播种子转换为迅雷种子

Linux 系统中文本处理“三剑客”之grep

时间: 2024-08-18 20:04:34

Linux 系统中文本处理“三剑客”之grep的相关文章

Linux文本处理三剑客之grep一族与正则表达式

一,grep一族是什么? Linux上有三种常用的文本处理工具,分别为:grep(egrep.fgrep).sed.awk.这三者被称为Linux文本处理三剑客. grep一族:文本搜索工具 grep:支持使用基本正则表达式: egrep:支持使用扩展正则表达式,相当于grep -E: fgrep:不支持使用正则表达式,相当于grep -F; [PS:fgrep不需要加载正则表达式引擎,因此速度较快,fgrep的搜索效率在当文件达到几亿行时就能体现出来.(大型web网站一天的日志量都是几亿行的,

Linux 文本处理三剑客之grep &nbsp; egrep

Linux 文本处理三剑客之grep   egrep grep: Global search REgular expression andPrint out the line. 作用:文本搜索工具,根据用户指定的"模式(pattern)"逐行去搜索目标文本,打印匹配到的行. 模式:由正则表达式的元字符及文本字符所编写的过元字符,其中正则表达示分基本正则表达式,和扩展正则正则表达式2类 元字符不表示其字面意义,而用于表示通配或控制功能滤条件.元字符有下面一些 字符匹配: .:匹配任意单个

Linux文本处理三剑客之grep及正则表达式

简要介绍 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.GREP是Global search Regular Expression and Print out the line的简称,即全局搜索正则表达式,它的使用权限是所有用户. 本篇文章从简明扼要,层次清晰的角度介绍grep命令和正则表达式,以及正则表达式和grep命令的配合使用. 1. 作用 文本搜索工具,根据用户指定的"模式(过滤条件)"对目标文本逐行进行匹配检查:打印匹

linux文本处理三剑客之grep家族及其相应的正则表达式使用详解

一.Linux文本处理三剑客.grep家族和正则表达式介绍 Linux上文本处理三剑客: grep(egrep, fgrep):文本搜索工具:基于"pattern(过滤条件)"对目标文本进行逐行搜索操作: sed:Stream Editor,流编辑器行编辑工具:文本编辑工具: awk:GNU awk,文本格式化工具:文本报告生成器: grep家族: grep: Global search REgular expression and Print out the line,支持使用基本正

linux文本处理三剑客之grep命令详解

Linux文本处理三剑客之grep grep:文本过滤(模式:pattern)工具 grep, egrep, fgrep(不支持正则表达式搜索) sed:stream editor,文本编辑工具 awk:Linux上的实现gawk,文本报告生成器 grep grep: Global search REgularexpression and Print out the line 作用:文本搜索工具,根据用户指定的"模式"对目标文本逐行进行匹配检查:打印匹配到的行 模式:由正则表达式字符及

文本处理三剑客之grep

文本处理三剑客之grep 正则表达式(regex) 文本处理工具 grep egrep 试验环境:CentOS 7.2 正则表达式 Linux的哲学之一"一切皆文件",学习Linux应得掌握其基本的文本处理工具,这些工具主要包括: 文件内容:less和cat 文件截取:head和tail 文件抽取:cut 关键字搜索:grep 正则表达式是计算机科学中的一个概念,又称作regex或RE, 正则表达式诞生于对神经网络研究的需要,随着技术发展,正则表达式已经广泛应用于各个领域,其主要应用对

文本处理三剑客之-grep

文本处理工具: Linux上文本处理三剑客: grep:文本过滤工具(以模式过滤:pattern) sed:stream editor,流编辑器,文本编辑工具 awk:Linux上的实现为gawk,文本报告生成器(格式化文本) 正则表达式:regular expression  REGEXP 由一类特殊字符及文本字符所编写的模式,其中有些字符不表示其字面意义, 而是用于表示控制或通配的功能: 分两类: 基本正则表达式:BRE 扩展正则表达式:ERE 元字符:\(hello[[:space:]]\

在Linux系统中文件(资源)和用户的管理

一个可执行二进制程序,被加载到内存,被内核调度到CPU上运行,这时候,就表现了一个进程.也可以说进程是程序的一个实例,是程序的动态表现. 在 Linux 系统中进程(process)是有属主的,也就是该进程以哪个用户的身份运行的.大家都知道,程序有输入和输出,也称这为程序IO.如果我们程序数据输入是磁盘.如,Web 服务器,接收用户的请求之后,把网页数据从磁盘中读入加工之后再把数据响应给用户.如果,发起Web 服务进程的用户没有读取该用户请求网页文件的权限.则无法响应用户的请求了.所以,文件(资

Linux系统中安装MySQL数据库操作手册

Linux系统中MySQL数据库安装手册 一.安装概述: 在Linux操作系统中安装MySQL数据库是一个我们必须要掌握的一门技术,也决定了你以后找工作的薪资待遇,所以你知道它的厉害了吧!学会安装只是第一步,你还得学好数据库的基本操作,以及搭建一个数据库的主从配置等等.这些我都会在后面的博文中说到.下面我就简单的写一些安装MySQL数据库的一些步骤,仅供参考,如有什么不妥的地方,还请见谅! 二.安装步骤: (一)基本准备工作 1.打开虚拟机,在虚拟机中下载好最新版的MySQL数据库的压缩包.在M