grep与正则表达式

文本处理中比较强悍的三个工具是:grep、sed、awk。

其中grep主要作用是对于用户给出“模式”对文本逐行进行匹配检查,然后进行打印。

  模式:由正则表达式字符及文本字符编写的过滤条件

格式:grep [选项] [正则表达式字符]  文件

 常用的选项:

    -v:反向查找,显示没有被匹配的的行

    -i:不区分大小写

    -o:只显示查找的内容

    -n:显示匹配的行号

    -c:统计匹配的行数

    -q:不输出任何内容

    -A #:显示出查找到的内容的后#行

    -B #:显示出查找到的内容的前#行

    -C #:显示出查找到的内容的前后各#行

    -e:实现多个选项之间或的关系 例如:grep -e 'root' -e 'bash' file

    -w:整行匹配整个单词

    -E:使用此选项开启egrep


各个选项示例:

    -v选项:

示例:不显示f1文件中带有数字的行

[root@myhost testdir]# cat f1

ni hao 

aaaaaa123 

345 bbbbb

[root@myhost testdir]# grep -v [[:digit:]] f1

ni hao 


    -i选项:

示例:查找出文件中含有大小写a的行

[root@myhost testdir]# cat f1

ni hao 

AAA123 

345 bbbbb

[root@myhost testdir]# grep -i a f1 

ni hao 

AAA123


    -n选项:

示例:查找出含有root的字符串并显示行号 

[root@myhost testdir]# grep -n root /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

11:operator:x:11:0:operator:/root:/sbin/nologin

    -o选项:

示例:在/etc/passwd文件中查找出root字符串

[root@myhost testdir]# grep -o root /etc/passwd

root

root

root

root


    -c选项:

示例:统计出/etc/passwd文件中以/bash/nologin结尾的一共有多少行

[root@myhost testdir]# grep -c "/sbin/nologin" /etc/passwd 

29


     -A选项:

示例:过滤出lisi用户所在行及后一行

[root@myhost testdir]# grep lisi -A 1 /etc/passwd

lisi:x:502:502::/home/lisi:/bin/bash

wangwu:x:503:503::/home/wangwu:/bin/bash


    -B选项:

示例:过滤出mysql系统用户行及前两行

[root@myhost testdir]# grep mysql -B 2 /etc/passwd

saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash


    -C选项:

示例:过滤出mail系统用户所在行及前后各一行

[root@myhost testdir]# grep mail -C 1 /etc/passwd

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

    

    -e选项:

示例:过滤出f1文件中包含数字或小写字母的行

[root@myhost testdir]# cat f1

ni hao 

AAA123 

345 bbbbb

[root@myhost testdir]# grep -e"[0-9]" -e "[a-z]" f1

ni hao 

345 bbbbb


     -w选项:

示例:查找出f1文件中的含有which单词的行

[root@myhost testdir]# cat f1

which

whichabc

abcwhich

[root@myhost testdir]# grep -w which f1

which

[root@myhost testdir]# grep which f1

which

whichabc

abcwhich

 

    -E选项


正则表达式篇:

 正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为元字符)。模式描述在搜索文本时要匹配的一个或多个字符串其中有 些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

 正则表达式分为两类:

             基本正则表达式:BRE

             扩展正则表达式:ERE

  元字符分类::字符匹配、匹配次数、位置锚定、分组 


字符匹配:

     . : 匹配任意一个字符

     [] :匹配指定范围内的任意一个字符

     [^] :匹配除指定范围外的任意一个字符

字符集:

     [:digit:] : 代表所有数字

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

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

     [:alpha:] : 代表所有大小写字母

     [:alunm:] : 代表所有字母和数字

     [:space:] : 代表空格和Tab

     [:punct:] : 代表所有标点符号

匹配次数:用在要指定的字符后,用于指定前面字符要出现的次数

   

     *:匹配前面字符任意次包括0次

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

     \?:匹配前面的字符0次或一次

     \+:匹配前面的字符至少一次

     \{m\}:匹配前面字符m次

     \{m,n\}:匹配前面字符至少m次至多n次

     \{,n\}:匹配前面字符至多n次

     \{m,\}:匹配前面字符至少m次

     

位置锚定:定位字符出现的位置

      

     ^:行首锚定,用于模式的最左侧

     $:行尾锚定,用于模式的最右侧

     ^模式$ :用于模式匹配整行

     ^$:表示空行

     \< 或 \b 词首锚定,用于锚定词的左侧

     \> 或 \b 词尾锚定,用于锚定词的右侧

        \<模式\> 用于锚定整个单词

分组:\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+

   分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,…

   \1: 从左侧起,第一个左括号以及与之匹配右括号之间 的模式所匹配到的字符; 

        实例: \(string1\+\(string2\)*\) 

             \1: string1\+\(string2\)* 

              \2: string2 

    后向引用:引用前面的分组括号中的模式所匹配字符(而 非模式本身)


      



    






   


      



    


原创文章,作者:ZJM,如若转载,请注明出处:http://www.178linux.com/30189

(0)
ZJMZJM
上一篇 2016-08-08 16:15
下一篇 2016-08-08 16:15

相关推荐

  • linux 系统启动流程

    假设以个人架设的linux主机为例:当你按下电源键之后,计算机硬件会主动读取BIOS来加载硬件信息及进行硬件系统的自我测试,之后系统会主动读取系统第一个可启动的设备,此时就可以读入引导装载程序了。 引导程序可以指定使用哪个内核文件来启动,并实际加载内核到内存中解压缩与执行,此时内核就能够开始在内存内活动,并检测所有硬件信息,与加载适当的驱动程序来使这部主机开…

    Linux干货 2016-09-12
  • lamp平台 php解析器基于模块和php-fpm

    首先,我先介绍一下实验环境: http服务器:192.168.236.128(php解析器基于modules) mysql服务器:192.168.236.129 编译和配置http服务器,http版本是2.4以上的。 由于http依赖于apr apr-util这两个包,但是我们系统上的rpm包版本比较低,我们也需要下载这两个源码包来编译,解决依赖关系。 还要…

    Linux干货 2015-08-31
  • 马哥教育网络班21期第6周课程练习

    一、vim编辑器的使用 二、练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@www ~]# cp /etc/rc.d/rc.sysinit /tmp [root@www ~]# l…

    Linux干货 2016-08-15
  • 浅谈Linux中的用户和组

    又到了周六,日常写博客的日子。 上周模模糊糊的写了第一篇博客,大概知道了怎么写,但是这周就比以往不同了,脑子中已经有了思路,那写起来就会更加详细易懂。 这周学了很多知识点,但是我想对Linux 用户和组进行详细的描述。 一、用户(Username/UID) 用户分为两种:管理员和普通用户     管理员root  UI…

    2017-07-22
  • grep命令及正则表达式

    grep命令和正则表达式 grep基本概念 grep:global search regular expression and print out the line. 作用:文本过滤器,用于文本搜索,用指定“模式”逐行匹配。 模式:由正则表达式字符及文本字符所编写的过滤条件 正则表达式:由一类特殊字符和文本字符所编写的模式,其有些字符不表示字符字面意义,而表…

    Linux干货 2016-11-05
  • Linux发行版的基础目录名称命名法则及功用规定

    [root@localhost /]# tree -L 1. <—-> 为 / 符号,所有文件的根目录;├── bin -> usr/bin <—-> 所有用户可用的基本命令程序文件;├── boot <—-> 引导加载器必须用到的各静态文件:kernel,initramfs(in…

    2018-02-28