码迷,mamicode.com
首页 > 系统相关 > 详细

Linux文本处理工具三剑客之grep

时间:2016-03-12 23:08:39      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:三剑客   linux   表达式   grep   egrep   

    Linux家族关于文本处理的工具有三个,他们分别为grep、awk和sed,今天我就介绍一下grep文本处理工具。

     首先,什么是grep呢?

     grep是一种文本搜索工具,基于“pattern”对给定文本进行搜索过滤,并对目标文本进行检查,并打印出符合条件的文本的一款文本处理工具。说到pattern,那么pattern又是什么呢?那就是大家所熟知的“正则表达式”。

    grep家族又有三个成员:grep,egrep和fgrep。

     grep: 支持正则表达式。

     egrep:支持使用扩展的正则表达式。

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

    grep:grep  [OPTIONS] PATTERN  [FILE...],这个是grep使用时的语法,指的是

     grep + 选项 + 正则表达式 + 文本文件

 grep -i :忽略字符大小写

 ~]# grep -i ‘uuid‘ /tmp/fstab
UUID=17caf342-d579-4dad-a16c-cf39353271c9 /
UUID=7ddc4cb3-07a9-47be-8273-afbded7b46e3 /boot

grep -o:仅显示匹配到的文本的自身

 ~]# grep -o‘^UUID‘ /tmp/fstab
UUID
UUID

grep -v:反向匹配

~]# grep -v"bash$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

   基本正则表达式元字符

   字符匹配:

.:匹配任意单个字符

 ~]# grep ‘p.‘ /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

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

 ~]# grep "[a]" /etc/fstab 
# /etc/fstab
# Created by anaconda on Sun Feb 28 11:21:11 2016

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

  说到范围,就简单的介绍一下特殊符号:

[:alpha:]:代表任何英文字母(不区分大小写) [:digit:]:代表所有数字

[:lower:]:代表所有的小写字母                [:upper:]:代表所有的大写字母

[:alnum:]:代表所有英文大小写和数字          [:space:]:任何会产生空白的字符

[:punct:]:代表标点符号                      [:blank:]:代表空格键和Tab键

 如果我们要取/etc/passwd下非字母的文本,即

 ~]# grep "[^[:alpha:]]" /etc/fstab 
#
#/etc/fstab
#Created by anaconda on Sun Feb 28 11:21:11 2016

 匹配次数:

*:匹配前面的字符任意次(0,1或者多次)

~]# grep "o*t" /etc/passwd 
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

.*:任意长度的任意字符
\+:匹配前面的字符至少1次

~]# grep "o\+t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

\{m\}:其前面的字符出现m次,m为非负整数

 ~]# grep "o\{2\}t" /etc/passwd
root:x:0:0:root:/root:/bin/bashoperator:x:11:0:operator:/root:/sbin/nologin

位置锚定:

^:锚定行首,也就是最左侧     $:锚定行尾,即最右侧

~]# grep -i "^c" /etc/passwd
colord:x:998:996:User for colord:/var/lib/colord:/sbin/nologin
chrony:x:996:994::/var/lib/chrony:/sbin/nologin

以上就是c开头并且在行首的句子呗选出来了

行尾锚定与行首锚定的用法大体相同,不过是将反三角号去掉,在行尾加上一个$("X$")

egrep

什么是egrep呢?其实egrep就是支持使用扩展正则表达式的grep命令,也就是grep -E。

 egrep也有着属于自己的扩展正则表达式的元字符

   首先字符匹配:

  .:代表任意单个字符

~]# egrep ‘r..t‘ /etc/passwd
root:x:0:0:root:/root:/bin/bash
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

   只要有r和t的都会被找出来,其中是两个字符,所以最后一行的r/ft也会被选出来

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

~]# grep "[abc]" /etc/fstab 
# /etc/fstab
# Created by anaconda on Sun Feb 28 11:21:11 2016

     上面只要有abc其中一个字符,就会被选出来。

[^]:代表匹配范围外的任意字符,用法与[]用法基本一样。

   []与[^]都可以使用之前提到的[:alpha:][:lower:]等等的范围。

  匹配次数:

   *:匹配任意次

  ?:匹配0次或者1次

   +:匹配一次或者多次

  以上三种都与grep中的用法是一样的,在这里会说一下匹配具体次数的:

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

  {0,n}:最多匹配n次         {m,}: 最少匹配m次

~]# egrep "o{1,3}" /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

上面就是以找出最少一个o,最多三个o的为例子来说明的。

  接下来就是位置锚定了:
  ^:锚定行首      $:锚定行尾       \<, \b:锚定词首       \>, \b:锚定词尾

行首行尾的锚定与grep的用法一样,在这里说一说词首词尾的锚定,在此就以词首锚定为例来说明。

~]# egrep "\<s" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

    以上就是正则表达式的一些基本用法,要熟练的使用这则表达式去查找本文文件,同时也要分清什么时候用到grep,什么时候用到egrep,也要多多去练习,才能彻底掌握grep。

 

 

 

 

 

 

 



本文出自 “11275479” 博客,请务必保留此出处http://11285479.blog.51cto.com/11275479/1750330

Linux文本处理工具三剑客之grep

标签:三剑客   linux   表达式   grep   egrep   

原文地址:http://11285479.blog.51cto.com/11275479/1750330

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!