linux正则表达式运用

正则表达式的重要性也不用我强调了,大家都懂的。需要说明的是,正则表达式是行处理工具,它会把匹配到的内容一行一行的显示出来。正则表达式分为:grep,egrep和fgrep。其中grep是基本正则;egrep是拓展正则;而fgrep为了查找速度快而舍弃了正则表达式,在此就不做说明了。

1 grep

1.1 用法:

grep [OPTIONS] PATTERN [FILE...]

1.1.1 OPTIONS

OPTIONS是选项的意思,grep的常用选项有:

-n:显示行号

-q:隐藏执行的结果

-i:不区分大小写

-o:只显示匹配到的内容而不是一整行

-v:只显示没有匹配到的内容。与-o相反

-E:使用扩展正则表达式。相当于egrep

-A #:显示被匹配到的行及其下#行

-B #:显示被匹配到的行及其上#行

-C #:显示被匹配到的行及其上和下#行

--color=auto:给匹配到的内容加上颜色

建议将grep -E --color=auto加入别名,酷炫!

1.1.2 PATTERN

PATTERN是模式的意思,grep支持的模式有很多

.:匹配任意单个字符

[[email protected] ~]# grep "." /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...

[]:匹配范围内的内容,可以是[5][s,w,t...][S-Z]等

[0-9]或者[[:digit:]]:所有数字

[a-z][[:lower:]]:小写字母

[A-Z][[:upper:]]:大写字母

[a-zA-Z][[:alpha:]]:所有字母

[0-9a-zA-Z][[:alnum:]]:所有数字和字母

[[:punct:]]:所有特殊符号

[[:space:]]:所有空格

注意:通配符中[a-z]表示所有字母

[[email protected] ~]# grep "[A-Z]" /etc/passwd
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
...

[^]:匹配范围之外的内容

[^0-9]或者[^[:digit:]]:除了数字之外的内容

*:匹配前面的内容任意次

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

[[email protected] ~]# grep -o "r..t" /etc/passwd
root
root
root
root
r/ft

\:脱义符,取消后面的字符原有的意思,赋予新的意思

\?:匹配前面的模式0次或1次,使用\重新赋予?新的含义

[[email protected] ~]# grep -o "r.\?.t" /etc/passwd
root
root
root
rat
rat
root
r/ft
rat

\+:匹配前面的模式1次或任意次

[[email protected] ~]# grep -o "r.\+t" /etc/passwd
root:x:0:0:root:/root
rator:x:11:0:operator:/root
r:/var/ft
rtkit:x:499:497:RealtimeKit
r/lib/avahi-aut
rt:x:173:173::/etc/abrt
r:/var/empty/saslaut
r/spool/post
rivilege-separated SSH:/var/empt
可以看到匹配到的内容都是以r开头和以t结尾。由于grep工作在贪婪模式下,它会匹配一行中符合条件的最长内容

\{m,n\}:匹配前面的模式至少出现一次,最多出现n次。使用\去掉{}原有的意思

\{m\}:前面的模式只能出现m次

\{0,n\}:前面的模式可以没有,也可以是任意个

\{m,\}:前面的默认至少得出现m个

[[email protected] ~]# grep -o "r.\{2\}t" /etc/passwd
root
root
root
root
r/ft

^:锚定行首,^后面的模式必须出现在行首

[[email protected] ~]# grep -o "^[[:alnum:]]\+" /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
...

$:锚定行尾,$前面的模式必须出现在行尾

[[email protected] ~]# grep -o "\/[[:alnum:]]\+\/[[:alnum:]]\+$" /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin

\<:和\b意思相同。锚定词首,\<后面的模式必须出现在词首。计算机中的单词是不包含特殊字符的字符串,而不是英语中的单词

[[email protected] ~]# grep "\<c" /etc/passwd
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin

\>:和\b意思相同。锚定词尾,\>前面的模式必须出现在词尾

\<root\>:匹配单词root

\(\):括号,使用脱义符去掉括号本身的意思。括号内的内容可以在后面进行引用,引用符号为\1,\2... \1表示引用的是第一个括号的内容;\2表示引用第二个括号的内容。以此类推。\(\(\)\):最外侧的括号是第一个括号,里面为第二个。\(l..e\):前面匹配到什么样的内容,后面引用时就是用该内容。如果前面匹配到的是love,后面引用时就不能是like了

[[email protected] ~]# grep -o "\([[:punct:]]\+\)\1" /etc/passwd
:/:/
:/:/
:/:/
::
:/:/
::
::
::
::
::
::

2 egrep

egrep=grep -E

2.1 用法同grep

grep [OPTIONS] PATTERN [FILE...]

2.1.1 PATTERN

大体上和grep相同,最大的区别在于egrep大部分模式不再需要使用\

.:不变

[]:不变

[^]:不变

*:不变

?:无需\

+:无需\

{m,n}:无需\

{m}:刚好m次

{m,n}:最少m次,最多n次

{m,}:最少m次

{0,n}:最多n次

^:不变

$:不变

\<,\b:不变

\>,\b:不变

(),\1,\2...:无需\

abc|cba:egrep新增,abc或者cba。表示或者两侧的所有内容,不同于ab(c|b)aa. ab(c|b)aa的意思是abcaa或者abbaa

题目:

写一个模式,能匹配出所有的邮件地址

egrep "\<[a-zA-Z][[:alnum:]_]{4,16}[[:alnum:]]\>@.*\.com"
时间: 2024-10-23 08:56:16

linux正则表达式运用的相关文章

linux正则表达式的使用

正则表达式的使用 1.1 创建环境 cat >q.txt<<EOF oldboy  oldboy hellooldboy hellooldboy awkoldboy  awkoldboy sedoldboy sedoldboy oldboyedu oldboyedu EOF 取出只有oldboy的行 grep "\boldboy\b" q.txt 实例1-1反向引用 [[email protected]~]# #####第一个里程碑-反向引用(先保护起来,然后使用)

Linux 正则表达式

Linux 正则表达式(*****) 1.什么是正则表达式? 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法 通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串. Linux 正则表达式一般以行为单位处理的. 注意事项: a.#alias grep='grep --color=auto'  ===>以特定颜色高亮显示匹配关键字 b.注意字符集,LC_ALL=C   #export LC_ALL=C 实战举例: 1)^ word  搜索以 word 开

Linux正则表达式grep与egrep

Linux正则表达式grep与egrep 正则表达式:它是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在很多文本编辑器或其他工具里,正则表达式通常被用来检索或替换那些符合某个模式的文本内容.其实正则表达式,只是一种思想,一种表示方法.只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串.常用的工具有grep, sed, awk,这三个都是针对文本的行才操作的. grep  过滤器语法: grep  [-cinvABC]  'word'  filenam

&nbsp; linux正则表达式解析

Linux 正则表达式解析 一.Linux文本搜索工具 Linux的文本搜索工具主要有grep,egrep,fgrep.其中grep支持基本和扩展的正则表达式的搜索.egrep支持扩展的正则表达式.fgrep不支持正则表达式的搜索,但是它的搜索速度比较快.这里我们具体探讨一下grep和egrep使用方法. 1.1grep用法 grep [OPTIONS] PATTERN [FILE...] --color={never,auto,always}:是否对搜索到字符串做颜色处理. -o :只显示被模

菜鸟的成长记录--linux正则表达式及grep

正则表达式 是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能:正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 元字符:不表示其字面意义,而用于额外功能性描述,下面是常用的元字符列表 符号 含义 . 表示匹配任意单个字符,例a.,匹配ab.ac.ad.ax * 表示它前面的字符可以出现任意次,例a*b,匹配aab.b.ab \? 表示它前面的字符可有可无,例a\?b,匹配a

linux正则表达式之-基础正则表达式(基于grep)

linux正则表达式: 简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法,如:假设@代表123456,!代表abcde.通过定义的这些特殊符号的铺助,系统管理员就可以快速的过滤,替换或输出需要的字符. 使用正则表达式注意事项: 1.linux正则一般是以行为单位处理的. 2.alias grep='grep --color=auto',讲课是以grep为例.(注意:为了使下面的案例更加清晰明了,在做下面的案例前请先执行此行命令) 3.注意字符集,LC_ALL=C linux里正则

关于清晰讲解linux正则表达式的博文分享

http://www.cnblogs.com/chengmo/archive/2010/10/10/1847287.html  linux shell 正则表达式(BREs,EREs,PREs)差异比较 http://www.360doc.com/content/11/0304/11/5912935_98007617.shtml  正则表达式练习 http://www.jb51.net/article/42989.htm  Linux 正则表达式详解 http://www.sjhf.net/bl

NO22 Linux正则表达式

Linux正则表达式: 原文地址:https://www.cnblogs.com/sinsenliu/p/9029383.html

Linux正则表达式结合三剑客实例

Linux正则表达式结合三剑客实例 案例一:取 ifconfig eth0 中的 inet addr 的 ip法一:ifconfig eth0|sed -n '2p'|sed -n 's#^.dr:##gp'|sed -n 's# B.$##gp'法二:ifconfig eth0|sed -n'2s#^.dr:##gp'|sed -n 's# B.$##gp'法三(后向引用):ifconfig eth0|sed -nr '2s#^.dr:(.) B.*$#\1#gp'练习法三:需要注意 sed:

Linux 正则表达式 grep

容易混淆的两个注意事项: 1)linux正则表达式一般是以行为单位处理的. 2)正则表达式和我们常用的通配符特殊字符是有本质区别的,例如:ls *.txt 这里的*就是通配符(表示所有),不是正则表达式. 注意字符集问题: 确保字符集:export LC_ALL=C --------------------------------------------- 基础正则表达式+扩展正则表达式含义解释: --------------------------------------------- .