当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 在Linux下正则表达式和grep命令的使用

Unix/Linux
磁带驱动器的使用
Linux 指令篇:起始管理--shutdown
Linux Shadow-Password-HOWTO - 6. upgrade或patc
Linux Shadow-Password-HOWTO - 2. 为何shadow你的pa
Linux Shadow-Password-HOWTO - 4. 编译程式
Ethernet HOWTO Linux以太网-HOWTO (6)技术信息
Ethernet HOWTO Linux以太网-HOWTO (7)笔记本电脑联网
Ethernet HOWTO Linux以太网-HOWTO (4)型号的信息
Ethernet HOWTO Linux以太网-HOWTO (5)电缆、同轴电缆、双绞线
Jaz-drive HOWTO -- 4. Jaz 磁片的用法
Jaz-drive HOWTO -- 5. Linux 上的 Jaz 工具软件
Jaz-drive HOWTO -- 6. 从 Jaz 磁片启动系统
LILO, Linux Crash Rescue HOWTO LILO 毁损,无法开机
Printing Usage HOWTO 如何使用打印机-1. 导言
Printing Usage HOWTO 如何使用打印机-2. 打印文档
Printing Usage HOWTO 如何使用打印机-3.文档类别
Printing Usage HOWTO 如何使用打印机-4. 杂项
Printing Usage HOWTO 如何使用打印机-5. 常见问题
Printing Usage HOWTO 如何使用打印机-6. 参考材料
Linux Shadow-Password-HOWTO - 1. 简介

Unix/Linux 中的 在Linux下正则表达式和grep命令的使用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 149 ::
收藏到网摘: n/a

正规表示法( Regular Exdivssion,RE )

1 什么是正规表示法:

什么是正规表示式 ( Regular Exdivssion, 底下简称 RE ) 呢?简单的说,在 Linux 的环境下,我们可以透过『字符串以及一些特殊字符的辅助』来进行文字的比对工作,好来让使用者筛选自己所需要数据。

这些特殊的字符与搭配使用的工具,就构成了正规表示法的主轴!

例如 /etc/rc.d/init.d 这个目录当中好了,如果你要找到一个文件内容含有 mail 这个字符串的文件名,要怎么搜寻呢?利用 grep 配合 mail 以及万用字符来搜寻所有的文件名『grep 'mail' /etc/rc.d/init.d/*』

2 正规表示法对于系统管理员的用途:

对于系统管理员来说,正规表示法则是一个『不可不学的好东西!』由于系统如果在繁忙的情况之下,每天产生的讯息信息会多到你无法想象的地步,而我们也都知道,系统的『错误讯息登录文件』 的内容记载了系统产生的所有讯息,当然,这包含你的系统是否被『入侵』的纪录数据。但是系统的数据量太大了,要系统管理员的 你每天去看这么多的讯息数据,想不疯掉都很难,这个时候,我们就可以透过『正规表示法』的功能,将这些登录的信息进行处理,仅取出『错误』的信息来进行分析。

3 正规表示法的广泛用途:

除了系统管理员之外,一大堆的软件与设定都是支持正规表示法的,最常见的例子就是『邮件服务器』!您是否有常常收到电子邮件里最让人诟病 的『广告信件』呢?那如果我在 Server 端就将广告信件给剔除的话,客户端就会减少很多不必要的频宽损耗了对吧!那么如何剔除广告信件呢?由于广告信件几乎都有一定的标题或者是内容,因此,只要 每次有来信时,都先将来信的标题与内容进行特殊字符串的比对,使用正规表示法发现有不良信件就予以剔除!目前两大服务器软件sendmail 与 postfix 都支持正规表示法的比对功能!很多的服务器软件、以及套件都支持正规表示法。

4 grep

语法:[root @test /root ]# grep [-acinv] '搜寻字符串' filenames-list

参数说明:

-a :将 binary 文件以 text 文件的方式搜寻数据

-c :计算找到 '搜寻字符串' 的次数

-i :忽略大小写的不同,所以大小写视为相同

-n :顺便输出行号

-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!

范例:

[root @test /root]# grep 'root' /var/log/secure

搜索 /var/log/secure 这个文件中包含 root 的行

[root @test /root]# grep -v 'root' /var/log/secure

搜索没有 root 的行

[root @test /root]# grep [A-Z]ANPATH /etc/man.config

说明:grep 是一个很常见的指令,最重要的功能就是进行字符串数据的比对了,需要说明的是『grep 在一个文件中查寻一个字符串时,他是以"整行"为单位来数据的撷取的!』

grep 是最简单的正规表示法搜寻指令之一,他并不支持一些更严谨的正规表示法内容,不过,已经相当的好用。

例题一:找出这个文件里面含有 know 这个字符,并将行号列出来:注意,大小写是不一样的

[root @test /root ]# grep -n 'know' regexp.txt

例题二:找出这个文件里面含有 * 这个字符,并将行号列出来:

[root @test /root ]# grep -n '\*' regexp.txt

例题三:我要将所有 know 不论大小写都列出来,并列出行号:

[root @test /root]# grep -ni 'know' regexp.txt

注意:类似的指令还有egrep、awk、gawk、sed等,将在后面详细说明

5 正规表示法的特殊字符(charaters)与 egrep 指令

特殊字符 表示意义

^word 待搜寻的字符在行首

word$ 待搜寻的字符在行尾

. 匹配任何一个可能的字符

\ 跳脱符号将特殊字符变成普通字符

? 任何一个『单一』字符

* 匹配模式