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

总结:

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

原文地址:http://blog.51cto.com/13646023/2106448

时间: 2024-10-07 02:46:19

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

五周第三次课(1月10日) 8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向

五周第三次课(1月10日)8.1 shell介绍8.2 命令历史8.3 命令补全和别名8.4 通配符8.5 输入输出重定向 history命令: 用于显示指定数目的指令命令,读取历史命令文件中的目录到历史命令缓冲区和将历史命令缓冲区中的目录写入命令文件. 该命令单独使用时,仅显示历史命令,在命令行中,可以使用符号!执行指定序号的历史命令.例如,要执行第2个历史命令,则输入!2. 历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取.在内存中,历史命令仅能够存储1000条历史命

五周第四次课(1月11日) 8.6 管道符和作业控制 8.7/shell变量 8.8 shell变量 8.9 环境变量配置文件

五周第四次课(1月11日)8.6 管道符和作业控制8.7/shell变量8.8 shell变量8.9 环境变量配置文件扩展bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 简易审计系统: http://www.68idc.cn/help/server/linux/2014042190951.html 关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command

五周第五次课(1月12日)

五周第五次课(1月12日)8.10 shell特殊符号cut命令 \脱义字符 cut -d -f -c 分割 8.11 sort_wc_uniq命令 sort ASCII排序 sort -n 特殊符号字母为0的排序 sort -nr      -n的反序排法 wc -l  统计行数 wl -m 统计字符数  $ 换行字符 wl -w 统计词数量,以空格或空白进行区分 uniq 去除重复 先排序再去重 sort 2.txt |uniq 8.12 tee_tr_split命令 |tee 重定向并打印

五周第五次课(1月12日) 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号

五周第五次课(1月12日)8.10 shell特殊符号cut命令8.11 sort_wc_uniq命令8.12 tee_tr_split命令8.13 shell特殊符号相关测验题目:http://ask.apelearn.com/question/5437 扩展1. source exec 区别 http://alsww.blog.51cto.com/2001924/1113112 2. Linux特殊符号大全http://ask.apelearn.com/question/7720 3. so

linux五周第三次课(3月7日)笔记

五周第三次课(3月7日)8.1 shell介绍8.2 命令历史8.3 命令补全和别名8.4 通配符8.5 输入输出重定向 搜索看一下有没有这两个shell,不安装. 8.2 命令历史 用过的命令,在/root/.bash_history存着 用cat命令查看一下/root/.bash_history 可以用命令history查看一下之前使用过的命令 history -c 修改了/etc/profile 配置文件,运行source命令,使其生效. 指定什么时候运行. 变量变了. 历史命令. 想要生

Linux20180423五周第四次课(4月23日)

五周第四次课(4月23日) 8.6 管道符和作业控制8.7/8.8 shell变量8.9 环境变量配置文件扩展bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719简易审计系统: http://www.68idc.cn/help/server/linux/2014042190951.html关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command-environ

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

五周第五次课(4月24日) 8.10 shell特殊符号cut命令8.11 sort_wc_uniq命令8.12 tee_tr_split命令8.13 shell特殊符号下相关测验题目:http://ask.apelearn.com/question/5437扩展1. source exec 区别 http://alsww.blog.51cto.com/2001924/11131122. Linux特殊符号大全http://ask.apelearn.com/question/77203. sor

2018.4.20 五周第三次课

shell介绍 shell脚本在日常的Linux系统管理中是必不可少的: shell是系统跟计算机硬件交互时使用的中间介质. shell是一个命令解释器,提供用户和机器之间的交互: 支持特定语法,比如逻辑判断.循环: 每个用户都可以由自己特定的shell: centOS7默认shell为bash(Bourne Agin shell) 还有zhs.ksh等. shell记录命令历史,默认保存至 .bash_history 文件中 概念:我们执行过的命令Linux都会记录,预设可以记录1000条命令

2018.3.23一周第五次课

1.1 系统目录结构 Linux各目录及每个目录的详细介绍: 参考 :https://blog.csdn.net/u013239236/article/details/48845251 如何看一个命令依赖哪个库,例: ldd /bin/ls "家"目录概念:Linux系统里的"家目录"(即用户目录)是存放个人数据.除了"root"(超级管理员)其他用户的设置文件,桌面文件以及个人数据都是存放在各自的用户目录下面.(普通用户模式下的路径,非超级管理