grep及正则表达式应用总结

相信学习任何Linux Release操作系统的人都知道“正则表达式、扩展正则表达式”的重要作用,学习好如何利用“正则表达式”来达到我们想要达到的效果,这需要大量的实践、总结。

下面是我针对“正则表达式、扩展正则表达式”的一些认识和理解,不会罗列命令,只说自己的经验,所以简单的命令说明我只是罗列含义(相信你能看明白),重要的知识点,通过grep命令演示并附图解释,希望对看到DaMiHua博客的你有所帮助。

一、什么是正则表达式?扩展正则表达式?

其实“正则表达式”就是处理字符串的一个标准或公式,你通过“正则表达式”去筛选你想要的字符串,就好像你拿着采购清单去市场采购,清单上面写着10把红木的椅子、一个dell的电脑……,你肯定是按照清单去筛选物品,直到采购完毕,那个清单的作用就好比“正则表达式”。

“扩展正则表达式”是正则表达式的增强版,其中最主要的提升在于提供了用或“|”的形式进行查找字符串。(你只要有个概念就可以,下面会用实例来演示其应用。)

二、正则表达式“元字符”(你可以这样理解:在“正则表达式”中有特殊意义的字符!)意义说明如下:

<1>.:匹配任意单个字符

说明:无需过多解释,仅仅是一个点号。

<2>[]:匹配范围内的任意单个字符

说明:[字符集]只要在[]中的任意字符都需要匹配,比如:如果你要查找xac、xbc、xdc可以这样匹配x[abd]c,就是代表[]内提供的字符集合中的任意一个,[a-z]:代表26个小写字母中的1个,我想你应该明白了,还有很多特定含义的表示方法,如[[:alnum:]]:代表任何数字、字母中的1个字符……,想知道其它的字符集可以去Google,你懂的!

<3>*:匹配前面的字符0次、或多次

说明:.*没错点号和星号的组合代表任意字符任意次!

<4>\?:前面的字符可有可无

说明:因为?有特殊意义,所以需要\这个转义字符(什么是转义字符,Google吧!),ab\?代表a或者ab。

<5>\+:前面的字符至少出现1次

说明:和\?一样,通过转义字符实现,ab\+代表ab,abb……

<6>\{m,n\}:匹配前面的字符至少m次,至多n次

说明:ab\{1,2\}代表ab,abb。

<7>\{n\}:精确匹配前面的字符n次

说明:无需解释,一看就明白了。

<8>^:锚定行首,代表其后的字符必须出现在这行的行首,"^字符……"

说明:how areyou!

What!

如果我只想找出以h开头的行,^h,满足你的要求。

<9>$:锚定行尾,代表其前的字符必须出现在这行的行尾,"……字符$"

说明:同上说明。

<10>\<:锚定词首,其后面的任意字符必须作为单词的首部出现

<11>\>:锚定词尾,其前面的任意字符必须作为单词的尾部出现

说明:锚定词首和词尾,一并解释,单词就是非特殊符号组成的连续的字符串,这个单词的概念很重要,这个我会通过下面的实例结合说明,我认为这是一个难点。

<12>\(\):后向引用,把()中的内容作为一个整体去匹配,可以通过\1来代表第一个左括号与之对应的右括号所包括的内容,\2代表第二个左括号与之对应的右括号所包括的内容,\3……

说明:这个也是一个不好理解的地方,我会通过实例结合说明。

<14>[^字符集]:[^a-z]不选择小写字母,意思就是取反。

3、扩展正则表达式“元字符”如下

<1>.:匹配任意单个字符

<2>[]:匹配范围内的任意单个字符

<3>*:匹配前面的字符0次、或多次

<4>?:前面的字符可有可无

<5>+:前面的字符至少出现1次

<6>{m,n}:匹配前面的字符至少m次,至多n次

<7>{n}:精确匹配前面的字符n次

<8>^:锚定行首,代表其后的字符必须出现在这行的行首,"^字符……"

<9>$:锚定行尾,代表其前的字符必须出现在这行的行尾,"……字符$"

<10>\<:锚定词首,其后面的任意字符必须作为单词的首部出现

<11>\>:锚定词尾,其前面的任意字符必须作为单词的尾部出现

<12>():后向引用,把()中的内容作为一个整体去匹配,可以通过\1来代表第一个左括号与之对应的右括号所包括的内容,\2代表第二个左括号与之对应的右括号所包括的内容,\3……

<13>[^字符集]:[^a-z]不选择小写字母,意思就是取反。

<14>|:代表“或”,下面的实例会详细说明它的用法。

三、有了筛选标准还要有筛选工具,也就是处理字符串的工具,grep/awk/sed被誉为在Linux中处理字符串的“三驾马车”,以grep为例,下面是说明:

<1>首先介绍一下grep的基本使用方法:

grep [OPTIONS] PATTERN[FILE...]

[OPTIONS]

--color=auto/always/never:用颜色显示匹配到的字符串(非常好用的功能,捕获的字符串 带有颜色显示。)

-o:只显示匹配到的字符串

-i:忽略大小写

-v:显示不能被模式匹配到的行

-E:使用扩展的正则表达式,还可以使用egrep代替grep -e

-A #:匹配到的行和之后的#行

-B #:匹配到的行和之前的#行

-C #:匹配到的行和前后各#行

PATTERN:文本字符和正则表达式的元字符组成的匹配条件。

<2>grep和egrep工作在贪婪模式,也就是最长匹配原则,如果你的搜索条件是a.*b(意思是找a中间是任意字符b结束的字符串,你应该懂的)搜索的字符串是abxxxxbssdebxx匹配的结果应该是abxxxxbssdeb。

四、以下的实例是我在学习正则表达式时候经常出现的问题,汇总说明如下:

<1>不理解或“|”的用法,不理解词首、词尾的锚定。我想要查找/etc/passwd中含有fedora或者root或者user1这三个单词的行,请体会我下面的两段代码查找模式。

图1

说明:也许你已经看出来了,图1这段代码是错的,因为xuser1、fedoraaca和/root(中的root这个字符串)都已经查找出来了,其实这段代码的意思是查找以fedora为词首的单词或者root这个字符串或者以user1为词尾的单词,这不是我想要的结果,图2是正确的代码,仔细体会一下,分组中的数据作为一个整体,配合在锚定词首和词尾,查找完整的单词。

图2

<2>图3的代码,充分利用egrep的贪婪模式取出路径的目录名(/etc/passwd,/etc/就是目录名,查找路径名的命令是dirname,查找基名的命令是basename,可以man一下其用法)。

图3

说明:.*/不管你有多少个目录分隔符/,我只提取最后一个,找出目录名,另外代码的含义,看看就应该明白。

<3>利用字符集、词首词尾锚定,定义合理的IP地址,这道题也是需要充分理解什么是锚定词首、词尾,并结合“|”或应用的一道题。

图4

<4>图5是分组引用的利用,找出/etc/passwd中以一个单词开头并以相同单词结尾的行,我已经做了alias grep=grep –color=auto,所以你看到的筛选结果会有颜色。

图5

说明:相信你已经看明白了其中的含义。

总结:如果你和我一样也是一个刚刚踏入Linux奇妙世界的人来说,应该花时间去真正理解这些正则表达式中“元字符”的意义,他们就好像阿拉伯数字一样,组合的形式多种多样,所以数学才那么深奥,如果没有理解这些“元字符”的意义,盲目的写模式,你会浪费很多时间和精力。

以上的内容其实是针对那些有一些正则表达式基础的“战友”看的,我觉得网上的内容只是解惑,给你某些方面的灵感,想要弄懂正则表达式或者grep的用法,只有找一本详细的资料,塌心学习,如果你根本没用过正则表达式,那你很难完全明白以上的内容。

我只是用我的语言描述了自己理解的正则表达式,如果有需要交流的“战友”可以留名(本人qq:865765761)!共同学习Linux。

时间: 2024-09-28 22:06:01

grep及正则表达式应用总结的相关文章

Linux &nbsp; &nbsp; grep命令,正则表达式

grep命令及正则表达式 grep命令 grep , egrep , fgrep grep,sed,awk 文本处理三剑客 grep: Global search REgular expression and Print out the line;全面查找正则表达式并将匹配到的行显示出来; 正则表达式 正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用;许多程序设计语言都支持利用正则表达式进行字符串操作; 主流的正则引擎又分为三类:DFA;传统型NFA;POSIX NFA; DFA

grep及正则表达式 含(含断言)

grep和正则表达式 1.grep:Global search REgular expression and Print out the file 作用:文本搜索工具,根据用户指定的模式对目标文件逐行进行匹配,打印匹配到的行 模式:由正则表达式字符及文本字符编写的过滤条件 格式: grep [options] pattern file[...] --color=auto 对匹配到的文本着色显示 -v 显示不能够被pattern匹配的行 -i 忽略file中文件字符的大小写 -n 显示匹配的行号

grep与正则表达式,grep、egrep和fgrep

grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同!正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大:1基础正则表达式grep 工具,以前介绍过.grep -[acinv]   '搜索内容串'   filename-a 以文本文件方式搜索-c 计算找到的符合行的次数-i 忽略大小写-n 顺便输出行号-v

grep及正则表达式随笔

grep [acivn] [--color=auto] '查找字符串' filename -a:将binary文件以text文件的方式查找数据 -c:计算找到'查找字符串'的次数 -i:忽略大小写 -v:反向选择 -n:将查找结果列出行号 --color=auto:查找结果中关键字着色 **********grep使用例子********** (1)列出一个目录下目录的名称: ll |grep '^d' |awk '{print $9}' 其中awk中$后面是列的位置 (2)列出一个文件,去除空

grep与正则表达式

一.grep简介 二.基本正则表达式 三.egrep扩展正则表达式 四.其他文本及查看工具{wc,cut,sort,uniq,diff,patch} 五.练习用例 一.grep简介 文本处理工具: Linux上文本处理三剑客: grep:文本过滤工具(模式:pattern) grep:基本正则表达式,-E扩展,-F egrep:扩展正则表达式,-G基本,-F fgrep:不支持正则表达式, sed:stream editor,流 编辑器 awk:Linux上实现的为Gawk,GNU/awk,文本

grep以及正则表达式

正则表达式是基本的文本处理常识,理解和掌握好grep以及正则表达式对进行文本处理尤为重要 Grep 根据模式(文本字符和正则表达式的元字符组合而成匹配条件)搜索文本,并将符合模式的文本行显示出来. 1.1grep家族: grep:基本正则表达式使用的命令 egrep:扩展正则表达式使用的命令 fgrep(fast grep):不支持正则表达式,在没有正则表达式的字符串中的使用效率非常高,cup资源消耗少 1.2grep命令格式 grep  [options] PATTERN [FILE...]

[Linux 006]——grep和正则表达式

在使用系统时,我们或多或少的有一些搜索.查找的需求,必须要在文本中搜索某个关键字,或者过滤出文本中某些特定的行.grep 命令就为我们提供了这样一个功能,同时,grep 还可以使用正则表达式进行匹配,这是一个强大的功能,有必要好好掌握. 1.grep 初体验 grep PATTERN [OPTIONS] FILE:在文件中按照模式进行查找.FILE 是我们要查找的目标文件,如果不指定目标文件,grep 将会从标准输入中读取输入的内容,然后进行匹配.为了方便起见,本文的所有演示都在命令行中通过标准

Linux基础之文本处理工具grep及正则表达式(附带egrep与grep的不同)

文本处理工具grep,正则表达式在Linux学习过程中很容易出现困惑与障碍的地方,这里分享下学习这方面内容的一些感受. grep Global search REgular expression and Print out the line 作用:文本搜索工具,根据用户指定的'模式(过滤条件)'对目标文本逐行进行匹配检查:打印匹配到的行: '模式':由正则表达式的元字符及文本字符所编写出的过滤条件. grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS]

利用grep与正则表达式快速精确实现文本通配

什么是grep? grep (global search regular expression(RE) and print out the line,其全称意义为全局搜索正则表达式,并打印出来.是一种功能强大,简单易用的文本搜索工具.它能根据其后指定的匹配方式匹配出文件中的文本,并把匹配到的那整行都打印出来. 在Linux中grep家族有三个成员,分别是grep,egrep和fgrep,其使用方法略有不同,其中egrep是grep的扩展,而fgrep则是在进行文本通配时把所有的字母都当做单词来处

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

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