9 grep & egrep & 正则表达式

grep

grep = Global search REgular expression and Print out the line

语法及用途

grep [OPTIONS] PATTERN [FILE...]

根据用户指定的“ PATTERN ”对FILE逐行进行匹配检查,打印匹配到的行;
PATTERN 是由正则表达式字符及文本字符所编写的过滤条件。

常用选项

参数 说明
–color=auto 对匹配到的文本着色显示;
-v 显示不能够被pattern匹配到的行;
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串;
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系(grep –e ‘cat ’ -e ‘dog’ file)
-w 整行匹配整个单词
-E 使用扩展正则表达式ERE,否则使用基本正则表达式BRE

正则表达式

基本正则表达式BRE

字符匹配

字符 含义
. 匹配任意单个字符;
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:digit:] 数字
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 字母
[:alnum:] 字母与数字
[:punct:] 标点
[:space:] 空字符或tab

匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数
字符 含义
* 匹配前面的字符任意次,包括0次(贪婪模式:尽可能长的匹配)
.* 任意长度的任意字符
? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{m\} 匹配前面的字符m次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{m,\} 匹配前面的字符至少m次

位置锚定

定位出现的位置
字符 含义
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词

分组

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
    \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
        实例: \(string1\+\(string2\)*\)
              \1: string1\+\(string2\)*
              \2: string2
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身),即\1引用的第一个匹配到的结果,而非模式。

扩展正则表达式ERE

要使用扩展正则表达式,需要使用egrep或grep -E命令,如下所示:
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]

字符匹配

字符 含义
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符

次数匹配

字符 含义
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n} 至少m,至多n次

位置锚定

字符 含义
^ 行首
$ 行尾
\<, \b 语首
\>, \b 语尾

分组

() 后向引用:\1, \2, …

或者

a|b 

C|cat    :C 或 cat 

(C|c)at  :Cat 或 cat


练习

  1. 显示/proc/meminfo信息中以s或S开头的信息

image1.png

  1. 显示rpc用户所使用的shell类型

image2.png

  1. 查看/etc/passwd中出现的2~3位数字

image3.png

  1. 查看/etc/grub2.cfg中以空白开始的非空行

image4.png

  1. 查看/etc/passwd 中用户名与shell同名的用户信息

image5.png

  1. 显示当前系统root、mage或wang用户的UID和默认shell

image6.png

  1. 找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

image7.png

  1. 使用egrep取出/etc/rc.d/init.d/functions中其基名

image8.png

  1. 使用egrep取出上面路径的目录名

image9.png

  1. 统计以root身份登录的每个远程主机IP地址的登录次数

image10.png

  1. 利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

0-9     :   [0-9]
10-99   :   [1-9][0-9]
100-199 :   1[0-9]{2}
200-249 :  2[0-4][0-9]
250-255 :  25[0-5]
  1. 显示ifconfig命令结果中所有IPv4地址

12.png


  1. [😒pace:] 

原创文章,作者:taobaibai,如若转载,请注明出处:http://www.178linux.com/31646

(0)
taobaibaitaobaibai
上一篇 2016-08-10 10:27
下一篇 2016-08-10 10:27

相关推荐

  • 从2个命令简单聊聊CentOS账户锁定原理

    linux中 passwd -l 和usermod -L有什么区别,各自的解锁和锁定原理是什么样的呢?

    2017-11-16
  • 十一.Linux博客-2016年8月14日if、case、find

    格式说明: 操作 概念 命令 说明及举例 十一.if、case、find if 单分支if开头+条件+then+fi结尾双分支 if else fi多分枝 if elif else fi case case $num in1|3|5)echo xxx;;2|4|5)echo yyy;;*)echo nullesac 多用于离散数值匹配 文件查找和压缩 文件系…

    Linux干货 2016-08-24
  • 第八周作业

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

    Linux干货 2017-02-24
  • 学习宣言

     博观而约取,厚积而薄发。

    Linux干货 2016-10-24
  • vim的简单应用

    vim的简单应用         之前我们学习过Linux的思想,其中有一条就是一切皆文本,所以在这里大部分配置文件都是文本模式存在的,那么使用简单的文字编辑器就可以修改配置了,之前我们学习过nano文本编辑器,但是Vim会比nano使用的更为方便,也更强大。 基本现在所有的Li…

    2017-06-17
  • 从Linux小白到大牛——与狼共舞的日子13

    马哥教育网络班21期+第13周课程练习 1、建立samba共享,共享目录为/data,要求:(描述完整的过程) 1)共享名为shared,工作组为magedu; 2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名; 3)添加sa…

    Linux干货 2017-01-03