zoukankan      html  css  js  c++  java
  • Linux三剑客之grep命令详解

    先来小菜一碟:

      cat /etc/passwd | grep -c "/bin/bash$" 

      以上,用来统计/etc/passwd 文件中以/bin/bash结尾的用户个数。

    grep用来基于正则去实现行过滤的工具;它有很多衍生命令:

      egrep 扩展的grep,即默认使用扩展正则表达式的grep,更高级。

      fgrep 专用于文件行过滤的工具。

    grep命令格式:grep [option] pattern file        option表示选项,pattern 表示要匹配的模式,file表示要查询的文件名

                         

    grep命令的常用选项:

      -E    开启扩展正则模式,相当于使用egrep命令

      -F    关闭正则表达式,将PATTERN看做字符串直接匹配

      -G    默认,开启基本正则表达

      -P    开启perl兼容正则模式,利用perl语言中的正则匹配,表示我不会,因此不涉及

      以上,属于pattern匹配方式的选择————————————————————

      -e    该选项针对"-",由于grep默认不支持pattern中包含"-" 的匹配。使用-e可以避免报错。

      -f    将PATTERN写入指定文件,通过该选项,可调用文件中的PATTERN去匹配目标文件

      -i    匹配时,忽略大小写进行

      -v    排除PATTERN,显示剩余没有被匹配到的内容行

      -w    将PATTERN视为一个单词(前后不是非字母就是一个结束),相当于PATTERN中加入了 " PATTERN"去定界。

      -x    当PATTERN匹配了整行内容时,才输出到屏幕;如

    [root@localhost tmp]# cat /etc/passwd |grep "^root"
    root:x:0:0:root:/root:/bin/bash
    [root@localhost tmp]# cat /etc/passwd |grep -x "^root"
    [root@localhost tmp]# cat /etc/passwd |grep -x "^root.*"
    root:x:0:0:root:/root:/bin/bash

      以上是帮助PATTERN提高性能的选项——————————————————

      -c    PATTERN成功匹配到内容的次数

      --color=   设置高亮方式,可以用{never|always|auto} 来实现

      -L    当grep目标文件是多个文件时,结果会输出“文件名:匹配行内容”的形式。-L则只将不包含匹配行的文件名输出。和-v类似。

      -R    递归查询匹配目录子文件,当目标文件类型为目录时

      -o    只输出被PATTERN匹配到的内容,而非默认输出整行内容

      -m #   匹配到内容的最大输出行数,如三行包含PATTERN,只输出两行,即可-m 2

      -q    静默执行

      -s    无提示,stderr会被忽略,-sq组合可完全屏蔽grep的输出

      以上是对grep结果的规范选项—————————————————————

      -H    输出文件名,在行内容前,当目标文件为多个时,默认

      -n    显示行号

      以上针对grep结果查看的选项—————————————————————

      -A #    显示匹配行及其后#行内容,理论上共#+1行

      -B #    显示匹配行及其前#行内容,理论上共#+1行

      -C #    显示匹配行及其前后#行内容,理论上共2#+1行

    关于grep命令的执行状态码:

        0  成功匹配

        1  未匹配

        2  报错,一般是目标文件不存在

    基本正则表达式:

     

        其中,(  ) 不仅可以用作反向引用的匹配范围,也可以用于组合字符串。如下例:

    [root@localhost tmp]# echo "xyz2xyzxy" |grep "xyz?" -o
    xyz
    xyz
    xy                -----xy被匹配到
    [root@localhost tmp]# echo "xyz2xyzxy" |grep "(xyz)?" -o
    xyz
    xyz      ------xy被为匹配到,由于xyz是一个组合,?针对的是这个组合而言

    扩展正则表达式:

        基于基本正则表达式;

        ?  变为  ?

        +  变为  +

        {}相关的PATTERN一律变为{} 的PATTERN,省去了标志

        ()     变为      ()

        同时引入了 " | " 表示逻辑或,表示匹配多个内容:

          chkconfig --list 3:on |grep -vE "crond|network|sshd|syslog" 

     

  • 相关阅读:
    mysql8.0.20安装
    MySQL EXPLAIN结果集分析
    初次安装aliSql
    升级vim到8.0
    REPL环境对语言的帮助
    Python环境搭建及pip的使用
    mysql数据库分库分表(Sharding)
    Git的使用
    Promise的初步认识
    对引用的文件起别名
  • 原文地址:https://www.cnblogs.com/viviian/p/10119564.html
Copyright © 2011-2022 走看看