加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

grep, egrep及相应的正则表达式用法详解

发布时间:2020-12-13 22:33:16 所属栏目:百科 来源:网络整理
导读:grep,egrep 及相应的正则表达式用法详解 一、grep/egrep GlobalsearchREgularexpressionandPrintout的简写, 是一种强大的文本搜索工具,它 根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索 ,并把匹配的行打印出来。U

grep,egrep及相应的正则表达式用法详解


一、grep/egrep

GlobalsearchREgularexpressionandPrintout的简写,是一种强大的文本搜索工具,它根据用户指定的文本模式(正则表达元字符以及正常字符组合而成)对目标文件进行逐行搜索,并把匹配的行打印出来。Unix的grep家族包括grepegrepfgrep

linux使用GNU版本的grep。它功能更强,可以通过-E-F命令行选项来使用egrepfgrep的功能fgrep不使用正则表达式搜索)


[root@localhosttmp]#whatisgrep
grep(1)-printlinesmatchingapattern
grep(1p)-searchafileforapattern
[root@localhosttmp]#然后可以在这用mangrep或者man1grep查询grep及正则表达式的用法

grep命令:

grep[OPTIONS]PATTERN[FILE...]

例子:grep--color=auto"root"/etc/passwd

[root@localhost~]#aliasgrep='grep--color=auto'
[root@localhost~]#echo$?
0

匹配模式选择:

不选表示默认使用基本正则表达式

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

-F:使用fgrep模式,PATERN不使用正则表达式

PATERN:使用这则表达式控制过滤条件,见本文后半段。

基本输出控制:

-c:只输出匹配行的计数

--color=[WHEN]:输出的匹配字段的颜色,WHEN=autonevealways

-l:查询多文件时只输出包含匹配字符的文件名。

输出行预设:

-H--with-filename,搜索多个文件时可以用次选项在每行输出结果前显示对应的文件名

-h:查询多文件时输出结果不显示文件名,结果需要通过管道再处理时用到

-n--line-number,输出匹配行并在行首显示其在源文件中的行号

内容行数控制(-o选项优先级高于本选项):

-A#输出匹配行及其后面的#

-B#:输出匹配行加其前面的#

-C#:输出匹配行及其前后各#

文件及路径选择:

-R-r:递归读取路径下的子目录及文件,相当于-drecurse选项

匹配控制:

-i:--ignore-case,不区分字符大小写
-v:显示不包含匹配文本的所有行。

-w?word-regexp精确匹配,匹配单词还不是字符串



二、正则表达式

参考阅读:

正则表达式30分钟教程

http://www.aspzz.cn/tools/zhengze.html#getstartedWhat

注:Linux里的操作规则略有不同,但基本思想不变

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符(元字符)、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。其中的元字符不表示字符本身的意义,而是用于表达控制或通配等功能;

对象:字符串

组成:元字符+正常字符

功用:过滤文本字符,查找匹配字符并得出结果,供其它命令使用

作用对象:文本字符(文本文件里面的内容)

分类:结合grep

基本正则表达式:grep

扩展正则表达式:grep-E,egrep

fgrep:fastgrep,不支持使用正则表达式

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

1.给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);

2.可以通过正则表达式,从字符串中获取我们想要的特定部分。

正则表达式的特点是:

1.灵活性、逻辑性和功能性非常的强;

2.可以迅速地用极简单的方式达到字符串的复杂控制。

由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到MicrosoftWordVisualStudio等大型编辑器,都可以使用正则表达式的强大过滤功用来处理文本内容。


基本正则表达式元字符

字符匹配:

.:匹配任意单个字符

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

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

[0-9],[[:digit:]]所有数字字符中任取一;

[^0-9],[^[:digit:]]所有非数字字符中任取一

[a-z],[[:lower:]]所有小写字母字符中任取一

[A-Z],[[:upper:]]所有大些字母字符中取一

[[:space:]]空格字符(不是空白字符)

[[:punct:]]所有标点符号中任取一

[0-9a-zA-Z],[[:alnum:]]所有的数字和字母集合中任取一

[a-zA-Z],[[:alpha:]]所有的字母集合中任取一

[:graph:]非空字符(非空格、控制字符)

[:cntrl:]控制字符

次数匹配:在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数

*:任意长度,表示0次、1次或多次;

"ab*c"

abbc,abcac

abb×

PS×-不匹配-匹配,下同)

.*任意长度的任意字符

工作于贪婪模式

贪婪模式――当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符。以这个表达式为例:a.*b,它将会匹配最长的以a开始,以b结束的字符串。如果用它来搜索aabab的话,它会匹配整个字符串aabab

?0次或1次;表示其左侧字符可有可无

"ab?c"

abbc,×

ac,abc

+:1次或多次;表示其左侧字符至少出现1次;

"ab+c"

ac,×

abc,abbbbc

{m}m次;表示其左侧字符精确出现m次;

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

ab{2}c

ac,abc,abbbc×

abbc

ab{0,3}c

ac,abcabbc,abbbc

abbbbbc×

{0,n}:至多n次;

{m,}:至少m次;

位置锚定

^:锚定行首

^PATTERN

$:锚定行尾

PATTERN$

^PATTERN$:用模式来匹配整行;

#grep"^[[:space:]]*$"/etc/rc.d/rc.sysinit

^$:匹配空白行;

单词锚定:由非特殊字符组成的连续的字符串

&;:锚定词首,也可用b

&;PATTERN,bPATTERN

#grep"&;sh"/etc/passwd

&;:锚定词尾,也可以用b

PATTERN&;,PATTERNb

&;PATTERN&;:匹配PATTERN能匹配到的整个单词

#ifconfig|grep"&;[0-9]{2}&;"

分组(PATTERNS)

注:PATTERNS与两边必须各有一个隔开空格,否则报错

注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆(保存于内置的变量中,这些变量是1,2,...),因此,还可以被引用;

1:引用,模式中自左而右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容;

2:引用,模式中自左右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容

(ab(cd)mn)12

abcdmnabcdmncd

(a.b).*1"

ambhelloanb×

ambhelloamb

PS1引用的是上次匹配到的结果,不是重新匹配一个合适过滤条件的字符过来

扩展的正则表达式元字符

表达方式与基本正则表达式基本相同

字符匹配

.匹配任意单个字符

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

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

[0-9],[[:alpha:]]所有的字母集合中任取一

[:graph:]非空字符(非空格、控制字符)

[:cntrl:]控制字符

次数匹配

*:任意次

?01

+:至少1

{m}:精确匹配m次;

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

{m,}:至少m次;

{0,n}:至多n次;

位置锚定

^锚定行首

$锚定行尾

&;,b锚定词首

&;,b锚定词

分组

()以整体参与过滤匹配运算

引用:1,...引用匹配到的结果

或者

a|ba或者b

或者两侧的所有内容;如果仅需要中竖线两侧的内容,则用分组括号括起即可。基本正则表达式没有这个功能。如

xyz|abc表示xyzbc或者xyabc

xyz|abc表示xyz或者abc


正则表达式

扩展正则表达式

涵义










字符匹配

.

匹配任意单个字符

[]

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

[^]

匹配指定范围外的任意单个字符

[0-9],[[:digit:]]

所有数字字符中任取一

[^0-9],[^[:digit:]]

所有非数字字符中任取一

[a-z],[[:lower:]]

所有小写字母字符中任取一

[A-Z],[[:upper:]]

所有大些字母字符中取一

[[:space:]]

空格字符(不是空白字符)

[[:punct:]]

所有标点符号中任取一

字符匹配

[0-9a-zA-Z],[[:alnum:]]

所有的数字和字母集合中任取一

[a-zA-Z],[[:alpha:]]

所有的字母集合中任取一

[:graph:]

非空字符(非空格、控制字符)

[:cntrl:]

控制字符





次数匹配


*

.* 表示任意长度的任意字符

任意长度,表示0次、1次或多次


0次或1次;表示其左侧字符可有可无


+
+

1次或多次;表示其左侧字符至少出现1

{m}
{m}

m次;次数=m

{m,n}
{m,n}

至少m次,至多nm?次数?n

{0,n}
{0,n}

至多n0?次数?n

次数匹配
{m,}
{m,}

至少mm?次数



位置锚定

^

锚定行首

$

锚定行尾

^PATERN$

用模式来匹配整行

^$

匹配空白行


单词锚定

&;或者b

锚定词首

&;或者b

锚定词尾

分组
(PATTERN)1,

(PATTERNS)1,

以整体参与过滤匹配运算,1,…表示引用

字符跟括号之间要有空格

或者

无此项

a|b

a或者b

练习:

参考网址:http://wenku.baidu.com/link?url=yxD0zu52W2BLHzPSWNH4m0ftFfUEnHmOCwh8cBrr67_9xicLOoAMDcIty7K-uEpPhNs7I15Nur7Z6sd2P1NJvzVDxasOnf6VFs7VK22km7C

进阶习题:

1、用正则表达式查找合理的ip

2、写出查找合理全国座机电话的正则表达式,区号和号码之间用“-”或“ ”相连

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读