天天看点

Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

用grep sed awk去处理字符串

能不能写好shell脚本php

ngix配置文件中也有正则

正则核心符号

。一个任意字符

个*

? 零个或1个

一个或多个

^ 开头

# 末尾

用法: grep [选项]... PATTERN [FILE]...

grep -cniv ‘关键字(正则)’ 文件路径

选项

-i 不区分大小写,默认情况下grep不区分关键字大小写

-c 行数

-n 显示关键词所在行号

-v取反(使用较多)

-r 遍历所有层级子目录

-A后面跟数字,过滤出符合要求的行以及下面的n行

-B后面跟数字,过滤符合要求的行以及上面的n行

-C后面跟数字,过滤符合要求的行以及上下各n行

扩展正则 grep -E ==sed -r ==awk

反复练习,掌握正则表达式

首先做个准备工作,把/etc/passwd文档拷贝到其他路径下,如/tmp下做试验

1、过滤出关键字root所在的行并显示行号。

grep -n 'root' /etc/passwd
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

可以看到有颜色标识关键字。

2、统计某一关键字出现的行数

grep -c 'nologin' passwd
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

下面那个15就是说nologin这个关键字出现了15次

3、搜索某一关键字出现的行,然后把没有出现关键字的行过滤出来

grep -vn 'nologin' passwd
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

4、搜索整个文件夹,在文件内容中招root。(注意与find命令找到的东西的区别)

grep -r 'root' /etc
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

紫色是文件的路径,搜索出来的东西很多,grep把/etc下所有包含root的文件中的root字所在的行和所在的文件信息都列了出来。

5、-ABC 作用演示,能列出关键字所在的行和临近的行。

grep -A2 'root' passwd grep -B2 'root' passwd grep -C2 'root' passwd
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

-C选项会把搜到的行的附近的行都列出来,当然如果搜索的目标在头上或者文尾,就不会列相应的行。

命令写法:grep -(cirvnABC) 'regexp' 文件或目录路径

精髓在regexp的写法,如何正确的把想要的东西用正则表达出来。

1、把含有0到9十个数字任意一个字符的行列出来

grep '[0-9]' passwd
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

取反再搜索下

没了,说明passwd文件中每一行都带有数字

Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

这里说明[0-9]==[0123456789]

2、把不以#号开头的行打印出来,

这条命令经常用于查看程序或者系统的配置文件,这种文件经常有大段的以'#'开头的注释行,直接看很麻烦。

grep -vn '^#' /etc/ssh/sshd_config
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

还是有空行,我们要再把空行过滤掉。

grep -vn '^#' /etc/ssh/sshd_config|grep -v '^$'

3、显示test.txt文档中含有r.o关键字的行

grep 'r.o' test.txt
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

.号表示任意一个字符,a-z,A-Z,0-9,特殊号等等。

4、搜索test.txt中形如'r*o'的行

grep 'r*o' test.txt
Linux shell基础(四)正则表达式与grep命令 beta一、正则表达式二、grep命令

注意这个正则的匹配结果,“r*o”可以代表的东西是只要以零个或任意多个r开头o结尾的字符,ro肯定可以,o也可以因为他表示0个r和1个o,rrro,rro这些肯定可以。

 本文转自 whytl 51CTO博客,原文链接:http://blog.51cto.com/11934539/2061342

继续阅读