专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Linux » grep正则表达式:Linux下正则表达式和grep命令的使用 »正文

grep正则表达式:Linux下正则表达式和grep命令的使用

来源: 发布时间:星期三, 2008年12月17日 浏览:108次 评论:0
    使用规则表达式要养成良好习惯就是在匹配模式两端加上‘’这样和shell文件通配符号做区别 
  正规表示法( 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 正规表示法广泛用途:

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

  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

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

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

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

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

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

  5 正规表示法特殊(charaters)和 egrep 指令

  特殊 表示意义

  ^word 待搜寻在行首

  word$ 待搜寻在行尾

  . 匹配任何个可能

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

  ? 任何个『单

  * 匹配模式中重复

  [list] 列表中

  [range] 列表中范围内

  [^list] 反向选择和 [list] 相反

  [^range] 反向选择和 [range]相反

  \{n\} 和前个相同字浮连续 n 个

  \{n,m\} 和前个相同字浮连续 n-m 个

  请特别留意『正规表示法特殊』和般在指令列输入指令『万用』并不相同例如在万用当中 * 代表是 0 ~ 无限多个意思但是在正规表示法当中 * 则是重复前意思~使用意义并不相同不要搞混了!

  例题:在 /etc 底下只要含有 XYZ  3个任何行就列出来

  grep [XYZ] /etc/*

  例题:我想要知道在 /etc 里面只要句首是 w-z 就将他印出来?

  grep ^[w-z] /etc/*

  6 df比较两个文件内容是否有不指令!

  语法:[root @test /root ]# df file1 file2

  范例:[root @test /root]# df index.htm index.html

  例子:ls –l | grep ‘^d’ 查询子目录

  注意:使用规则表达式要养成良好习惯就是在匹配模式两端加上‘’这样和shell文件通配符号做区别

  7 充分规则表达式专用

  符号 执行

  pattern1 | pattern2 逻辑或

  (patten) 对模式进行分组

  char+ 搜索前面个或者多个重复例子

  char? 搜索前面个或者0个例子

  例题:t+ 匹配个或个以上连续t如t tt ttt

  t? 匹配0个或1个t 如 t 或 ‘ ’

  “create | stream “ 和两种模式种进行匹配

  重点回顾

  • shell文件匹配和规则表达式区别

  shell文件匹配是用于匹配文件名

  正规表示法RE用途主要是用来做为『搜寻』串的用匹配文件里面内容和用来过滤特殊讯息等用途;

  • 由于严谨度区别正规表示法的上还有更严谨延伸正规表示法;

  • 正规表示法处理方式经常是以『整行』或称为『整段』来进行处理;

  • grep 和 egrep 在正规表示法里面是很常见两支其中 egrep 可以用区别模式去匹配以及支持更严谨正规表示法语法

0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: