grep和正则表达式详解

一、Linux上文本处理三剑客

grep:文本过滤(模式:pattern)工具;

sed:文本编辑工具;

awk:Linux上的实现gawk,文本报告生成器;

二、grep

grep:Global search REgular expression and Print out the line,是一款文本过滤(模式:pattern)工具。

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;

模式:由正则表达式字符及文本字符所编写的过滤条件。

grep语法:

grep [OPTIONS] [PATTERN] [FILE...]

eg1:

eg2:

eg3:

eg4:

OPTIONS:

--color=auto: 对匹配到的文本着色显示;

-v: 显示不能够被pattern匹配到的行;

-i: 忽略字符大小写;

-n:显示匹配的行号;

-c: 统计匹配的行数;

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

-q: 静默模式,不输出任何信息;

-A #: after, 后#行;

-B #: before, 前#行;

-C #:context, 前后各#行;

-e:实现多个选项间的逻辑or关系;

grep –e ‘cat ’  -e ‘dog’ file

-w:整行匹配整个单词;

-E:使用ERE;

示例:

eg1:匹配除了root以外的所有行

eg2:

eg3:

eg4:

eg5:

eg6:

eg7:

eg8:

eg9:

eg10:

eg11:

三、正则表达式

3.1 正则表达式REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能;

3.2 正则表达式分为两类:

3.2.1 基本正则表达式:BRE

3.2.2 扩展正则表达式:ERE

3.3 grep工具支持基本的正则表达式,egrep支持扩展的正则表达式,并且grep的-E选项其实就是egrep,fgrep不支持正则表达式搜索;

3.4 正则表达式引擎:

3.4.1 采用不同算法,检查处理正则表达式的软件模块;

3.4.2 PCRE(PerlCompatible Regular Expressions);

3.5 元字符分类:字符匹配、匹配次数、位置锚定、分组;

3.6 正则表达式详细使用帮助文档:man 7 regex;

四、基本正则表达式元字符

字符匹配:

.   :匹配任意单个字符;

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

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

[:alnum:]所有的字母和数字

[:upper:] 所有的大写字母

[:lower:] 所有的小写字母

[:alpha:] 所有的字母(不区分大小写)

[:space:] 所有空白字符

[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)

[:digit:] 所有的数字

[:xdigit:]十六进制数字

[:graph:] 可打印的非空白字符

[:print:] 可打印字符

[:punct:] 所有的标点符号

eg1:

eg2:

eg3:

次数匹配:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

*:匹配前面的字符任意次,包括0次

贪婪模式:尽可能长的匹配

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

\:转义符

\?:匹配其前面的字符0或1次

\+:匹配其前面的字符至少1次

\{n\}:匹配前面的字符n次

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

\{,n\}:匹配前面的字符至多n次

\{n,\}:匹配前面的字符至少n次

eg1:(vim f3,在f3文件里添加以下内容,如图所示)

eg2:

eg3:

eg4:

eg5:

eg6:

eg7:

 位置锚定:对特定的位置进行定位

^:行首锚定,用于模式的最左侧

$:行尾锚定,用于模式的最右侧

^PATTERN$: 用于模式匹配整行

^$: 空行,不含有空白字符的行;

^[[:space:]]*$ :空白行,含有空白字符的行(空格和tab),匹配的时候包含空行;

\< 或 \b:词首锚定,用于单词模式的左侧

\> 或 \b:词尾锚定;用于单词模式的右侧

\<PATTERN\>:匹配整个单词

eg1:

eg2:

eg3:

eg4:

eg5:

eg6:

eg7:

eg8:

分组

分组是指将一个或多个字符捆绑在一起,当做一个整体进行处理,其符号为:\(\);例如:\(root\)\+;

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ... ;

\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;

实例:\(string1\+\(string2\)*\)

\1: string1\+\(string2\)*

\2: string2

后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

eg1:vim f1,添加以下内容,如图所示

eg2:vim f2,添加以下内容

五、egrep及扩展的正则表达式

egrep=grep -E;

格式:egrep [OPTIONS] PATTERN [FILE...]

eg1:

六、扩展正则表达式元字符

字符匹配

. 任意单个字符;

[] 指定范围的字符;

[^] 不在指定范围的字符;

次数匹配

*:匹配前面字符任意次;

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

?: 0次或1次;

+:至少一次;

{m}:精确匹配m次;

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

{m,}:至少m次;

{,n}:至多n次;

  位置锚定

^  :行首;

$  :行尾;

\<, \b :语首;

\>, \b :语尾 ;

   分组

符号:()

后向引用:\1, \2,...

或者:

a|b:a或b;

C|cat: C或cat;

(C|c)at:Cat或cat;

时间: 2024-11-15 17:39:41

grep和正则表达式详解的相关文章

grep与正则表达式详解(更新中...)

grep作用:使用模式匹配指定文件中的文本,是一款很好用的文本搜索和过滤工具 模式:正则表达式字符以及文本字符编写的过滤条件 正则表达式:由一类特殊字符及文本字符所编写的的模式,其中有些字符不表示字面意义,而表示          控制或者通配功能,分为基本正则表达式和扩展正则表达式两类 grep默认使用基本正则表达式,egrep或者grep -E开启扩展正则表达式 --color=auto:为匹配到的字符着色 -v:反选,显示不能被模式匹配到的行 -F:使用fgrep -P:使用perl语言的

2015年8月27日课程作业(grep,正则表达式详解)

一.作业(练习)内容: 1.总结本此课程中所涉及命令的使用方法及相关示例展示  grep: 文本搜索工具,根据用户指定的文本模式(正则表达元字符及正常字符组成而成)对目标文件进行逐行搜索,显示匹配的行 grep [OPTIONS]... [PATTERN] [FILENAME]... --color=auto    #对匹配到的字符串作高亮显示 -i       #忽略大小写 -v       #仅显示匹配不到行 -O       #仅显示匹配到的字符串 -q       #静默模式 -E  

grep及正则表达式详解

grep正则表达式1.grep定义 Globally search a Regular Expression and Print 全局搜索(匹配正则表达式的)并打印 扩展命令:egrep:扩展grep,相当于grep -E 命令,使用扩展正则匹配.fgrep:fast grep,不支持正则匹配的grep,只能匹配字符本来的意义. grep与egrep的区别是egrep支持更多扩展的正则 grep参数(#代表数字)-v:显示不匹配的行-i:忽略字母大小写-o:只打印匹配的字符-E:扩展正则表达式-

Linux系统grep及正则表达式详解

1.grep:根据模式搜索文本 并将符合模式的文本行显示出来 文本字符和正则表达式的元字符组合而成匹配条件 grep'root' /etc/passwd搜索/etc/passwd文件中包含有root字符的行显示出来 -i:只显示被模式匹配的行 --color:被模式匹配的行用颜色显示出来 -v:只显示没有被模式匹配的行 -o:只显示被模式匹配到的字符串 2.正则表达式: 元字符: .:表示匹配任意单个字符 grep'r..t' /etc/passwd []:表示匹配指定范围内的任意单个字符 [^

grep正则表达式详解及练习

grep正则表达式详解及练习 一.在学习grep正则表达式前,先了解下linux著名的文本处理三剑客: (1)grep.egrep.fgrep 文本搜索工具. (2)sed     文本编辑工具,一种流编辑器,行编辑工具. (3)awk 强大的文本分析工具,文本格式化工具,文本报告生成器. 以上三大命令均支持正则表达式,本文以grep正则表达式为例展开学习. 1.什么是正则表达式? 正则表达式(Regular Expression):由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意

Shell编程之---正则表达式详解

正则表达式详解 普通字符:只是字面的意思 元字符:超过字面意思的意义 基本正则表达式元字符及其意义 * #0个或多个在*字符之前的那个普通字符 .               #匹配任意字符 ^         #匹配行首 $         #匹配行尾 $$ #执行上一条命令 !$ #上一条命令的最后一个参数,例如是/etc/passwd,继续对该参数操作,可以为 cat !$ []        #匹配字符集合 \          #转义符 \{n\}      #匹配前面字符出现n次 \

Linux 正则表达式详解

正则表达式(REGULAR):为处理大量的字符串而定义的一套规则和方法,为了处理大量字符串而生 常见命令参数 基础正则表达式 . :有且只有任意一个字符(包括空格) * :重复前面任意0或者多个字符 .*:匹配任意字符==>所有,包括空格 \ :转义字符,让有意义的字符,显示原型 \$ --> $本身 ^ :^d 以d开头的文件 $ :/$ 以/结尾的文体 ^$:表示空行 grep -vn "^$" h.txt -->不显示空行 -n 显示行号 sed -r 's#(

python正则表达式详解

python正则表达式详解 正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样,不过只要学会了任意一门语言的正则表达式用法,其他语言中大部分也只是换了个函数的名称而已,本质都是一样的.下面,我来介绍一下python中的正则表达式是怎么使用的. 首先,python中的正则表达式大致分为以下几部分: 元字符 模式 函数 re 内置对象用法 分组用

PHP正则表达式详解(一)

前言: 半年前我对正则表达式产生了兴趣,在网上查找过不少资料,看过不少的教程,最后在使用一个正则表达式工具RegexBuddy时,发现他的教程写的非常好,可以说是我目前见过最好的正则表达式教程.于是一直想把他翻译过来. 本文是Jan Goyvaerts为RegexBuddy写的教程的译文,版权归原作者所有,欢迎转载.但是为了尊重原作者和译者的劳动,请注明出处!谢谢! 1.什么是正则表达式 基本说来,正则表达式是一种用来描述一定数量文本的模式.Regex代表Regular Express.本文将用