正则介绍 grep

什么是正则

1、grep 的常用选项

grep 是用来过滤指定关键词的。具体操作,见下图,

grep 有个比较好的特点,自带颜色在过滤关键词上。不加颜色的话,就使用绝对路径,见下图,

不加颜色的话,看起来比较费劲。
接着来看一下各个选项的作用,见下图,

-c 查看行数,-n 显示行号,-i 不区分大小写的话,先来编辑一下 passwd 文件,进入下图,

将上图中红色框框的位置,改动三个字母为大写字母 NOL ,保存后退出。接着下图操作,

让 -n 与 -ni 做对比之后,不难发现, -ni 的结果多了第2行的大写的 NOLogin 。-i 的作用就是不区分大小写。接着查看其他选项的作用,见下图,

-v 是取反的作用,上面的命令就是列出不含”nologin“的行项,可以看最前面的行数与上个命令结果做对比,可以发现是互补的。接着查看 -r 的作用,见下图,

包含 root 的结果内容太多,不一一截屏。

以上说明,grep -r 可以作用在目录上,查找目录及所有的子目录内包含”root“的内容,去掉 -r 就只能作用在文件上。 如果想知道 -r 选项这边有没有把 passwd 内的 root 列出来,可以按下图操作,

将 -r 的结果内容重定向到文件 /tmp/grep.log 中,然后过滤出包含 passwd 的内容。
接着查看其他选项,见下图,

-A 后面跟数字,过滤出符合要求的行以及下面n行
-B 同上,过滤出符合要求的行以及上面n行
-C 同上,同时过滤出符合要求的行以及上下各n行
以上就是 grep 的常用选项。

2、grep 正则表达式

先查看下图例子,

输出的结果全部包含 0-9 的数字,[ ] 表示一个范围。接着使用 -v 选项来查看没有包含数字的结果,见下图,

结果显示 passwd 文件里面完全没有不包含数字的行项目,接着在文件 inittab 里面有查到不包含数字的行项目,缺少9行和10行,说明这两行里面包含数字,可以使用 vim /etc/inittab 命令进入验证结果,见下图,

在 vim 里面输入”:set nu“,可以显示行数,然后就可以看到9、10行里面确实包含数字。

^ 表示以后面跟的内容开头,见下图例子,

inittab 文件里面全部是以#开头的文件,前面的行数都是连续的,并且可以和上上图的内容验证。现在要改动 inittab 文件里面的内容,先拷贝一份文件到当前目录下,这里需要注意的是,改动的内容必须是拷贝的文件,不能去动原文件。这是比较安全的做法,系统自带的文件不能轻易更改,否则会导致系统启动不了。
执行命令 vim inittab ,回车,见入下图,

在红色框框中随机增加一行不以#开头的内容,保存后退出。接着下图操作,

可以看到,当前目录下的 inittab 文件中14行的内容没有出现,说明第14行不符合要求,这一行就是刚刚改动的不以#开头的行项目。接着加上 -v 选项来查看一下,见下图,

可以看出,14行就是不以#开头的行。以#开头的行都是解释说明的内容,没有实际意义,以后工作中想避开这些解释说明的内容,就可以使用此方法。
现在还是在文件 inittab 中,更改一下内容,输入命令 vim inittab ,回车,见下图,

更改上图红色框框的内容,保存后退出。接着往下操作,

结果是一样的。接着操作其他内容,见下图,

可以看到,命令结果除了数字3和5,其余全部显示红色。说明 [^0-9] 表示的是非 0-9 的一个字符。接着验证一下,再次更改一下文件 inittab 的内容,见下图,

增加上图红色框框的内容,保存后退出。接着往下操作,

可以看到,新增加的行项目里面,只有a符合要求,a是红色的。再往下操作,

上图中,^[^0-9] 表示的是以非数字开头的行。加上行数,再查看一遍,见下图,

总结一下 ^ 的作用,把 ^ 放在 [ ] 里面,表示取反,非的意思。放在 [ ] 外面就是以后面的内容开头。

接着看下图,

要想知道上图的 ‘r.o‘ 什么意思,先进入 passwd 文件更改一下内容,见下图,

增加上图两行红色框框的内容,保存后退出。接着往下操作,

对比一下两条命令的结果,后面编辑的 rao 和 r>o ,也都能被匹配到。所以 ‘r.o‘ 里面的 . 表示一个任意的字符。那么能不能匹配到 . 呢?接着做实验,先更改一下 passwd 文件的内容,见下图,

把 > 改成 . ,保存后退出。重新过滤,见下图,

也是可以匹配到 . 的。
还有一个特殊符号 (星号),操作之前还是先更改一下 passwd 文件的内容,见下图,

将上图红色框框的内容更改一下,保存后退出。接着往下操作,

可以看出 ‘r.o‘ 的结果,除了大写的 O ,其余的小写 o 全部出现了。所以
(星号)的意思是, (星号) 右边的字符表示需要匹配的内容,左边的字符表示重复 0-n 次,n 是一个随意的数字。‘oo‘ 中的0次就表示只有一个 o ,所以该命令的结果是,一个 o 和多个 o ,都匹配了。简单来说,‘oo‘ 表示 n 个 o 。
接着把 . 和 (星号)放在一起,做实验,见下图,

可以看到所有的字符都匹配到了,说明‘.’表示任意的任意字符,0个也可以。假如想匹配其中的一行字符,具体操作见下图,

接着操作花括号 { } ,\ (脱义符号)把它原本的含义去掉,见下图,

在 grep 当中,直接使用 { } 花括号,是没有任何意义的,就单纯表示为花括号。而在正则当中,{ } 花括号表示的是一个范围,真正的写法是 grep ‘o{2}‘ passwd ,其中的 ‘o{2}‘ 表示o出现2次。但是命令直接这样写的话,结果又不能匹配,需要做一个脱义。正确的写法就是上图出现结果的命令 grep ‘o{2}‘ passwd 。而这个命令中4个 o 的字符为什么可以识别到呢,实际上应该理解为分别的2个 o 。后面还可以有另外一种写法,grep ‘o{0,3}‘ passwd ,表示1到3个 o 都是可以匹配的。不过这种写法,一般很少用到。
如果觉得上面的 \ (脱义符号)看着不舒服的话,可以使用 egrep 命令,这样就不需要用到 \ (脱义符号)了。见下图,

还可以使用 grep -E 命令,这个命令和 egrep 命令的效果是一样的,并且都不需要用到 \ (脱义符号)。还有一种写法,见下图,

上面的 ‘(oo){2}‘ 表示 oo 出现2次,就是 4 个 o 。
综上,{ } 花括号表示前面字符的重复范围。
接着介绍一个特殊符号 + (加号),它与 (星号)挺像的,见下图,

上图中的 ‘o+o‘ ,表示+号前面字符的1次或多次,它与 (星号)的差别在于,(星号)表示的是 0 次或多次。当然,这边把后面的字符 o 换成其他字符,应该会比较清晰,见下图,

接着介绍 ?号,见下图,

?号表示 ?号前面字符的重复次数为0次或1次。上面的例子不够特殊,自己写几个上去,输入命令 vi passwd ,回车,见下图,

更改上图两个红色框框的内容,保存后退出。接着往下操作,

可以验证,?表示 ?前面的字符重复0次或1次。
接着介绍 |(竖线),它表示或者的意思,可以多个字符串操作,见下图,

也可以不区分大小写,加上 -i 选项,见下图,

总结:
. 表示任意一个字符
(星)表示0个或多个前面的字符
. 表示通配
{ } 表示前面字符的范围

  • 表示1个或多个前面的字符
    ?表示0个或1个前面的字符
    | 表示或者

原文地址:http://blog.51cto.com/13503302/2085402

时间: 2024-10-07 19:41:34

正则介绍 grep的相关文章

9.1-9.3 正则介绍 grep上 中 下

六周第一次课(3月12日) 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下 扩展 把一个目录下,过滤所有*.php文档中含有eval的行 grep -r --include="*.php" 'eval' /data/ 9.1 正则介绍_grep(上) 介绍 本章将要学习 grep/egrep.sed.awk egrep是grep升级版 test1 [[email protected] ~]# mkdir grep [[email protected] ~]# cd

正则介绍grep

正则表达式,又称规则表达式,英文名为Regular Expression,在代码中常简写为regex.regexp或RE,是计算机科学的一个概念.正则表通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"))操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.

9.1 正则介绍_grep上 9.2 grep中 9.3 grep下

9.1 正则介绍_grep上  9.2 grep中 9.3 grep下 扩展 把一个目录下,过滤所有*.php文档中含有eval的行 grep -r --include="*.php" 'eval' /data/ # 9.1 正则介绍 grep 上 ![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170822/222929890.png?imageslim) ``` [[email protected] ~]# ls 111  1_hea

正则介绍_grep

9.1 正则介绍grep上 正则是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串. 语法: grep [-cinvABC] 'word' filename -c :打印符合要求的行数 -i :忽略大小写 -n :在输出符合要求的行的同时连同行号一起输出 -v :打印不符合要求的行 -A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行 -B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行 -C :后跟一个数字,例如 –C2 则表

linux的正则、grep及egrep介绍

正则介绍: 解释对"正则表达式"的定义是:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串.在很多文本编辑器或其他工具里,正则表达式通常用来检索和替换那些符合某个模式的文本内容.许多程序设计语言也都支持利用正则表达式进行字符串操作.对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,还是查询某个日志文件并分析其内容,都会用正则表达式. 其实正则表达式只是一种思想.一种表示方法.只要我们使用的工具支持这种表示方法,那么这个工具就可以处理正则表达式的字符

正则介绍、grep

正则介绍 在计算机科学中,对"正则表达式"的定义是:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串.在很多文本编辑器或其它工具里,正则表达式通常用来检索和替换那些符合某个模式的文本内容.许多程序设计语言也都支持利用正则表达式进行字符串操作.对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作和中,物理李娜是查找某个文档,还是查询某个日志文件并分析其内容,都会用到正则表达式. 其实正则表达式只是一种思想.一种表示方法.只要我们使用的工具支持这种表示方法,那么这个工具就可以处

9.1 正则介绍_grep(上);9.2 grep(中);9.3 grep(下)

扩展 把一个目录下,过滤所有*.php文档中含有eval的行 : # grep -r --include="*.php" 'eval' /data/ 9.1 正则介绍_grep(上) 正则是什么? ? 正则就是一串有规律的字符串 ? 掌握好正则对于编写shell脚本有很大帮助 ? 各种编程语言中都有正则,原理是一样的 1.创建目录:                    mkdir grep 2.进入目录:                    cd grep 3.拷贝文件到当前目录:

六周第一次课(1月15日) 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下

六周第一次课(1月15日)9.1 正则介绍_grep上9.2 grep中9.3 grep下 在计算机科学中,对"正则表达式" 的定义是:它使用单个字符串来描述或匹配一系列符合某个句法规则的字符串.在很多文本编辑器或其他工具里,正则表达式通常用来检索和替换那些符合某个模式的文本内容.许多程序设计语言也都支持利用正则表达式进行字符串操作.对于系统管理员来讲,正则表达式贯穿在我们的日常运维工作中,无论是查找某个文档,还是查询某个日志文件并分析其容,都会用到正则表达式.其实正则表达式只是一种思

Linux CentOS7 VMware正则介绍、grep工具、egrep表达式

一.正则介绍 正则是学习shell脚本的必学的内容,正则学的好坏直接影响到shell编程能力. 正则表达式:使用单个字符串来描述或匹配一系列符合某个句法规则的字符串.通常用来检索和替换那些符合某个模式的文本内容.正则表达式贯穿到整个运维日常,无论是查找某个文件,还是查询某个日志文件并分析其内容均用到. 正则表达式是一种思想,一种表示方法.常用的工具grep.sed.awk三剑客. 二.grep上 grep全称是Global Regular Expression Print,表示全局正则表达式版本