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

相关推荐

  • 编译安装http

    下载源码并解包   2 准备编译环境yum groupinstall “Development Tools” 3 编译安装   ./configure –prefix=/app/httpd24 –sysconfdir=/etc/httpd24/ –enable-ssl &#821…

    2017-12-02
  • 第八周作业

    1、写一个脚本,使用ping命令探测172.16.250.1-172.16.250.254之间的所有主机的在线状态;     在线的主机使用绿色显示;     不在线的主使用红色显示; #!/bin/bash for i in {1..254};do if ping -c 1 -w 1 192.16…

    2017-07-03
  • linux基础第二周

    1. 用chattr命令防止系统中某个关键文件被修改:# chattr +i /etc/resolv.conf 然后用mv /etc/resolv.conf等命令操作于该文件,都是得到Operation not permitted 的结果。vim编辑该文件时会提示W10: Warning: Changing a readonly file错误。要想修改此文件…

    2017-09-09
  • bash脚本编程实例

    bash脚本编程实例 1.写一个脚本 能接受四个参数:start、stop、restart、status start:输出“starting脚本名finished.” restart:输出“restarting脚本名finished.” stop:输出“stoping脚本名finished.” status:输出“status脚本名finished.” 其他…

    Linux干货 2017-09-04
  • Redis基于Sentinel哨兵高可用方案

    下载最新redis版本,当前最新版本为  2.8.19  2014-12-30 安装redis 首页地址:http://redis.io/ 最新稳定版下载地址: http://download.redis.io/releases/redis-2.8.19.tar.gz # tar -xvf redis-2.8.19.tar.gz # cd…

    2015-03-03
  • sed命令应用详解

    sed应用详解 sed是文本处理处理工具“三大剑客”之一,它 是一种流编辑器,sed一次只处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。sed不会修改原文件内容,除非你使用重定向存储输出。…

    Linux干货 2016-08-11