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)
上一篇 2016-08-08 16:15
下一篇 2016-08-08 16:15

相关推荐

  • 马哥教育网络20期+第4周作业博客

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 答:cp -a /etc/ske1 /home/tuser1 && chown -R go-rwx /home/tuser1 2、编辑/etc/group文件,添加组hadoop。 答:echo "…

    Linux干货 2016-09-05
  • Docker 之初次体验

    一、Docker 简介  lxc linux container,openvz  容器中各虚拟机只有一个内核,而是多个用户空间  在库中完成虚拟化,比如wine 或者在windows中运行bash  在应用程序的运行级别提供虚拟化,比如jvm   pstree , pid 为1 的进程  …

    Linux干货 2017-02-24
  • 网络基础

    网络小白一个,针对网络的基础知识无从下手,因此本文引用了鸟哥私房菜中的众多概念性知识,在此谢过,本文主要从OSI七层协议,TCP协议和一些网络中专业词汇进行解析,并通过子网掩码的划分,网络接口的配置、路由配置等实例来加深对网络的理解。 一、OSI七层协议:     OSI七层协议的由来:   由于网络链接过程…

    Linux干货 2016-09-07
  • nmap ncat tcpdump浅析

    nmap 的使用 nmap — 网络探测工具和安全/端口扫描器 Usage:nmap [ <扫描类型> …] [ <选项> ] { <扫描目标说明> } 扫描目标说明 -iL inputfilename (从列表中输入) 从 inputfilename中读取目标说明 [root@localhost&…

    Linux干货 2017-03-15
  • vim编辑器

      Linux文本编辑器vim     Linux下的编辑器最常用的就是vim或者vi文本编辑。vi和vim编辑器的区别是vim是vi的改进版本,在vi编辑器的基础上上扩展了很多实用的功能。 vim的使用 用vim打开文件:     vim [options] [file ..]…

    Linux干货 2016-12-04
  • 第一周作业

    1、描述计算机的组成及其功能 答:计算机主要有5大组件构成: 1) 计算器:用户数据计算,主要是指CPU 2) 控制器:用于控制数据流或者指令流,控制计算机系统的各个组件的协同工作以及信息的流动,如各种控制芯片(南桥,北桥等) 3) 存储器:用户数据的存放,如内存 4) 输入设备:如键盘,鼠标等 5) 输出设备:如显示器,外置的存储设备( 硬盘,光…

    Linux干货 2016-10-30