当前位置: > Linux命令 >

文本搜索必学命令-grep egrep fgrep用法以及正则表达式

时间:2014-11-05 01:33来源:linux.it.net.cn 作者:IT

 一grepegrepfgrep命令

  本文中主要介绍了linux系统下grep egrep fgrep命令和正则表达式的基本参数和使用格式方法(注释文中fg代表例子
基本定义

  grep(global search regular RE ) and print out the line全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具它只能使用基本的正则表达式来搜索文本并把匹配的行打印出来

  grep是很常见也很常用的命令它的主要功能是进行字符串数据的比较然后符合用户需求的字符串打印出来但是主意grep在数据中查找一个字符串时是以整行为单位进行数据筛选的

  egrep命令等同于grep E利用此命令可以使用扩展的正则表达式对文本进行搜索并把符合用户需求的字符串打印出来

  fgrep命令等同于grep F它利用固定的字符串来对文本进行搜索但不支持正则表达式的引用所以此命令的执行速度也最快
命令基本用法

  grep [option] &#;搜索字符串&#; filename

  grep常用选项

  a :在二进制文件中以文本文件的方式搜索数据 
   fg:在/etc/inittab内搜索包含rc字符串的行
   grep a &#;rc&#; /etc/inittab
   c :计算找到&#;搜索字符串&#;的次数 
   i :忽略大小写 
   v :反向查找即显示没有&#;搜索字符串&#;内容的那行 
   o :只显示被模式匹配的字符串 
   n :输出行号 
   colour(color):颜色显示 
   A显示匹配到字符那行的后面n行 
   B显示匹配到字符那行的前面n行 
   C显示匹配到字符那行的前后n行 

  二正则表达式
基本定义

  正则表达使用单个字符串来描述匹配一系列符合某个句法规则的字符串在很多文本编辑器里正则表达式通常被用来检索替换那些符合某个模式的文本简而言之正则表达式就是处理字符串的方法以行为单位进行字符串的处理通过一些特殊符号的辅助可以让用户轻松搜索/替换某特定的字符串

  正则表达式分为两类基本的正则表达式和扩展的正则表达式
正则表达式详细介绍
 基本的正则表达式

  ()元字符

   :匹配任意单个字符 
     fg查找包含student且student后面带一个字符的行 
     grep student /etc/passwd //模式可以用单引号和双引号如果模式中要做变量替换时则
   必须用双引
   []:匹配指定范围内的任意单个字符[abc][az][][azAZ] 
      fg查找带有数字的行 
      grep [] /etc/passwd 
   [^]:匹配指定范围外的任意单个字符 
     fg查找没有小写字母的行 
     grep [^az] /etc/inittab 
   [:space:]:表示空白字符 
   [:punct:]:表示所有标点符号的集合 
   [:lower:]:表示所有的小写字母 
   [:upper:]:表示所有的大写字母 
   [:alpha:]:表示大小写字母 
   [:digit:]:表示数子 
   [:alnum:]:表示数字和大小写字母使用格式[[:alnum:]]等 

  ()次数匹配

  *  :匹配其前面的字符任意次 
   fg查找root出现次或次以上的行 
   grep root* /etc/passwd 
   * :任意字符  
   fg查找包含root的行 
   grep &#;root*&#; /etc/passwd 
   ?匹配其前面的字符次或次 
   {mn} :匹配其前字符最少m最多n次) 

  () 字符锚定

  ^:锚定行首此字符后面的任意内容必须出现在行首 
     fg查找行首以#开头的行 
     grep &#;^#&#; /etc/inittab 
   $:锚定行尾此字符前面的任意内容必须出现在行尾 
   fg查找行首以root结尾的行 
   grep &#;root$&#; /etc/inittab   
   ^$:锚定空白行可以统计空白行 
    <或者b:锚定词首其后面的任意字符必须做为单词首部出现 
     fg:查找root且root前面不包含任何字符的行 
   grep &#;<root&#; /etc/nfig 
   >或者b:锚定词尾其前面的任意字符必须做为单词尾部出现                                  
   fg<root> 查找root单词  grep "<root>" =grep "brootb" 

  扩展的正则表达式

  扩展的正则表达只是在基本的正则表达上作出了小小的一点修改其修改如下

  在扩展的正则表达中把( ) 写成(){ } 写成{ }另外加入了+次数匹配匹配其前面的字符至少出现一次无上限|: 或者(二取一)其余的都一样 基本正则表达式使用( ) { }  ? |都需要转义在扩展正则表达中不需要加其详细信息如下

  () 字符匹配的命令和用法与基本正则表达式的用法相同这里不再重复阐述

  () 次数匹配

  * :匹配其前面字符的任意次 
   ?:匹配其前面字符的此或着此 
    + :匹配其前面字符至少此 
      fg至少一个空白符 &#;[[:space:]]+&#
   {mn} :匹配其前面字符m到n次 

  () 字符锚定的用法和基本正则表达式的用法相同在此不再阐述

  ()特殊字符

  | : 代表或者的意思 
      fggrep E &#;c|cat&#; file表示在文件file内查找包含c或者cat 
   :表示转义字符此表示符号

  三grep命令利用小实例

  ()显示/etc/inittab 中以#开头且后面跟一个或者多个空白符而后又跟了任意非空白符的行 
    grep &#;#[[:space:]]*[^[:space:]]&#; /etc/inittab 
    
   () 输出不是数字开头的行
   grep &#;^[]  /etc/passwd 
    
   ()输出行首是 
     grep &#;^(|)&#; /etc/inittab或grep E &#;^(|)&#; /etc/inittab 
       
   ()查找前面是rc中间接任意字符而后跟/rc 
     grep &#;*(rc)*/*&#; /etc/inittab 
     
   ()取出当前电脑上的IP 
     ifconfig |grep  "^eth" |grep "<[]{} |cut d: f 
     
   ()查找当前系统上名字为student(必须出现在行首)的用户账户的相关信息文件为/etc/passwd 
      grep "^student" /etc/passwd 
   ()显示/proc/meminfo文件中以不区分大小写的s开头的行
   grep i &#;^s&#; /proc/meminfo或者 grep &#;^[sS]&#; meminfo
   () 显示/etc/inittab 中以#开头且后面跟一个或者多个空白符而后又跟了任意非空白符的行
   grep &#;^#[[:space:]]*[^[:space:]]&#; /etc/inittab
   () 显示/boot/grub/nf文件中以一个或者多个空白符开头的行
   grep &#;^[[:space:]]{}&#; /boot/grub/nf
   ()显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行
   grep &#;^([])*$&#; /etc/inittab 或者 grep &#;^([[:digit:]])*$&#; /etc/inittab
   ()找出ifconfig命令结果中的之间的整数
   ifconfig | egrep &#;b[][]b?|b[][]b|b[][]b|b[]b&#color    

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容