2018.4.22 五周第五次课 (正则grep-过滤指定关键词)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018.4.22 五周第五次课 (正则grep-过滤指定关键词)相关的知识,希望对你有一定的参考价值。

正则表达式介绍-grep(过滤指定关键词)

egrep使用时,不需要添加脱义字符\

概念:它使用单个字符串来描述或匹配一系列符合某个句法则规则的字符串;
正则表示式通常用来检索和替换那些符合某个模式的文本内容。
无论是查找某个文档,还是查询某个日志文件并分析其内容,都会用正则表示式。
正则就是一串有规则的字符串;
掌握好正则对于编写shell脚本有很大帮助;
各种变成语言中都有正则,原理是一样的。
命令格式:grep [-cinvrABC] ‘word‘ filename
常用选项如下:
-c 表示打印符合要求的行数;
-i 表示忽略大小写;
-n 表示输出符合要求的行及其行号;
-v 表示打印不符合要求的号;
-r 遍历所有的子目录
-A 后面跟一个数字,例如-A2表示打印符合要求的行及下面的两行;
-B 后面跟一个数字,例如-B2表示打印符合要求的行及上面的两行;
-C 后面跟一个数字,例如-C2表示打印符合要求的行及上下各两行。
^ 这个符号表示以什么什么开头。如:^# 以#开头;
或者[^#] 取反,除#号开头的行
  • 创建一个grep目录,拷贝过来一个文件/etc/passwd

    [[email protected] /]# mkdir grep #创建一个grep目录
    [[email protected] /]# cd /grep/ #进这个目录里面
    [[email protected] grep]# cp /etc/passwd . #拷贝passwd到.(本目录下)
    [[email protected] grep]# ls #查看目录下有什么文件
    passwd

  • 过滤passwd文件里,nologin的字符

    技术分享图片
    这里nologin过滤完后标红,是因为grep有一个--color=auto 添加颜色显示
    可以查看下grep命令
    [[email protected] grep]# which grep #which查看grep
    alias grep=‘grep --color=auto‘
    /usr/bin/grep

  • grep查看符合要求的行数 -c

    [[email protected] grep]# grep -c ‘nologin‘ passwd #-c符合’nologin‘的行数
    15

  • grep显示这个文件包包含‘nologin‘的行数。

    [[email protected] grep]# grep -n ‘nologin‘ passwd
    2:bin:x:1:1:bin:/bin:/sbin/nologin
    3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4:adm:x:3:4:adm:/var/adm:/sbin/nologin
    5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10:operator:x:11:0:operator:/root:/sbin/nologin
    11:games:x:12:100:games:/usr/games:/sbin/nologin
    12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    13:nobody:x:99:99:Nobody:/:/sbin/nologin
    14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    15:dbus:x:81:81:System message bus:/:/sbin/nologin
    16:polkitd:x:999:997:User for polkitd:/:/sbin/nologin
    17:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    18:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    19:chrony:x:998:996::/var/lib/chrony:/sbin/nologin

  • grep不区分大小写显示出来 -ni

    技术分享图片

  • grep取反,除了nologin的显示出来 -v

    技术分享图片

  • 遍历所有的子目录 -r

    [[email protected] grep]# grep -r ‘root‘ /etc/ (etc目录下所有包含root的文件列出来)
    技术分享图片

  • -A2把包含root的行,以及这行下面的两行都打印出来。

    [[email protected] grep]# grep -nA2 ‘root‘ passwd
    技术分享图片

  • -B2把包含root的行,以及这行下面的两行都打印出来。

    [[email protected] grep]# grep -nB2 ‘root‘ passwd
    技术分享图片

  • -C2把包含root的行以及这上下两行都打印出来。

    [[email protected] grep]# grep -nC2 ‘root‘ passwd
    技术分享图片


grep正则表似乎具体用法示例

查看一个文件里0-9所有的数字,[]括号表示里面的任意一个字符

[[email protected] grep]# grep ‘[0-9]‘ passwd
技术分享图片

反选-v,把不包含数字的行列出来。

[[email protected] grep]# grep -nv ‘[0-9]‘ /etc/inittab
技术分享图片

取反,过滤掉所有以#开头的行

[[email protected] grep]# grep -nv ‘^#‘ inittab
把不是以#开头的行,显示出来

  • 过滤非0-9开头的数字的行显示出来

    技术分享图片

    过滤出任意一个字符和重复字符,示例如下:

    [[email protected] grep]# grep ‘r.o‘ passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    技术分享图片
    .表示任意一个字符,上例中,r.o表示r与o之间有一个任意字符的行过滤出来。

指定要过滤出的字符出现次数,示例如下:

[[email protected] grep]# grep ‘o{2}‘ passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
技术分享图片
这里用到了符号{}表示内部为数字,表示前面的字符要重复的词数。
{}左右都需要加上转义字符\,另外使用{}还可以表示一个范围,具体格式为{n1,n2}
{}花括号表示前一个字符的范围,如果o{2},表示2个连续的oo显示出来。

过滤出一个或多个指定的字符,示例如下:

[[email protected] grep]# egrep ‘o+b‘ passwd
nobody:x:99:99:Nobody:/:/sbin/nologin

过滤出零个或iyge指定的字符,示例如下:

[[email protected] grep]# egrep ‘o?1o‘ passwd
bin:x:1o:1:bin:/bin:/sbin/nologin
o1o

过滤出字符串1或者字符串2,示例如下: |或者

[[email protected] grep]# egrep ‘root|nologin‘ passwd
技术分享图片

总结:

. 表示任意一个字符
* 表示零个或者多个字符
{} 表示一个范围
+ 表示一个或多个任意字符
? 表示零个或多个任意字符
| 表示或者

以上是关于2018.4.22 五周第五次课 (正则grep-过滤指定关键词)的主要内容,如果未能解决你的问题,请参考以下文章

Linux20180424五周第五次课(4月24日)

Linux20180424五周第五次课(4月24日)

Linux20180424五周第五次课(4月24日)

五周第五次课

五周第五次课

五周第五次课(3月9日)