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

相关推荐

  • shll函数作业

    扫描/etc/passwd文件每一行,如发现GECOS字段为空,则填充用户名和单位电话为62985600,并提示该用户的GECOS信息修改成功。 [root@localhost sh.log]# cat whileGECOS.sh  #!/bin/bash #author:DYW #扫描/etc/passwd文件每一行…

    Linux干货 2016-08-24
  • rsyslog记录日志于mysql

    rsyslog记录日志于mysql:     前提:准备好msql server或mariadb server;     (1) 安装rsyslog连接至mysql server的驱动模块;        &n…

    Linux干货 2016-12-05
  • yum软件管理使用详解

    yum介绍 yum客户端的使用 配置文件项作说明: 案例repo配置文件。 创建yum源命令(yum-config-manager) yum list相关命令 yum安装 yum更新和升级 yum查找和显示 yum删除程序 查看仓库 实战演练本地yum仓库(光盘) YUM内置变量 创建YUM仓库(http) yum介绍 yum命令是在Fedora和RedHa…

    Linux干货 2016-09-06
  • shell脚本的一点补充

    脚本内容补充 数组 变量:存储单个元素的内存空间数组:存储多个元素的连续的内存空间,相当于多个变量的集合。 数组名和索引 索引:编号从0开始,属于数值索引注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引,bash4.0版本之后开始支持。bash的数组支持稀疏格式(索引不连续) 数组的使用 声明数组: declare -a ARRAY_NAME…

    Linux干货 2016-08-24
  • linxu通配符

    通配符 globbing globbing:文件名通配(整体文件名匹配,而非部分) 匹配模式:元字符 *:匹配任意长度的任意字符 ab*:ab开头的单词 *ab*:包含ab的单词 *ab:ab结尾的单词 *a*b*:包含a、b的单词 ?:匹配任意单个字符 ab?:ab开头的三个字符的单词 ??ab:ab结尾四个字符的单词 a?b:a开头、b结尾三个字符的单词…

    Linux干货 2018-03-11
  • 1019作业

    1019作业 柴震 软连接 硬连接 软连接和硬链接的区别 属性与定义: 硬链接:新建的文件是已经存在的文件的一个别名,所以创建时链接数递增;而且当原文件删除时,新建的链接文件仍然可以使用,因其直接对应于数据块。 软链接:也称为符号链接。新建的链接文件以“路径”的形式来表示另一个文件,其大小为指向的路径字符串的长度,不增加或减少目标文件in…

    Linux干货 2016-10-19