文本处理三剑客之 grep/egrep

时间:2022-08-27 12:29:37

  grep:文本过滤工具 支持BRE
  egrep: 支持ERE
  fgrep: 不支持正则

    作用:根据用户指定的“模式”,对目标文本逐行进行匹配检查,打印匹配到的行
    模式:由正则表达式字符及文本字符所编写的过滤条件
        [OPTIONS] PATTERN [FILE...]
    options:

      -v:显示不被PATTERN匹配的行 排除

# 显示/etc/passwd文件中不以/bin/bash结尾的行

grep  -v '/bin/bash$' /etc/passwd

      -i:忽略字符大小写
      -n:显示匹配的行号
      -c:显示匹配的行数
      -o:仅显示被匹配的字符串
      -q:静默模式,不输出任何信息
      -A #:after,后#行
      -B #:before,前#行
      -C #:context,前后各#行
      -e:实现多个选择间的逻辑or关系
      -w:整行匹配整个单词
      -E:使用扩展的正则表达式 相当于egrep  
      -F:使用fgrep,不支持正则表达式 相当于fgrep
      --color:将过滤出内容加上颜色显示

alias grep='grep --color=auto'
 
[root@centos6 ~ ::]#grep -i "^s" /proc/meminfo
SwapCached: kB
SwapTotal: kB
SwapFree: kB
Shmem: kB
Slab: kB
SReclaimable: kB
SUnreclaim: kB
[root@centos6 ~ ::]#grep "^[sS]" /proc/meminfo

  基本正字表达式BRE:

    字符匹配:
      .:匹配任意单个字符
      []:匹配指定范围内的任意单个字符
      [^]:匹配指定范围外的任意单个字符

    以下是元字符:
      [:digit:]:数字
      [:lower:]:小写字母
      [:upper:]:大写字母
      [:alpha:]:所有字母
      [:space:]:空白字符
      [:alnum:]:所有字母及数字
      [:punct:]:所有标点符号
      [:graph:]:可打印的非空白字符;
      [:blank:]:水平空白字符(空格和制表符)
      [:cntrl:]:不可打印的控制字符(退格、删除、警铃)
      [:pirnt:]:打印字符
      [:xdigit:]:十六进制数字

# 显示/etc/grub2.cfg文件中,至少一个空白字符开头的且后面存非空白字符的行
grep "^[[:space:]]\+[^[:space:]]" /etc/grub2.cfg # 找出“netstat -ant” 命令的结果中以“listen”后跟0,1或多个空白字符结尾的行 netstat -ant |grep "listen[[:space:]]*$"    # 注意,使用元字符时,字符本身的中括号外,还需要加一层中括号 # 添加用户bash,testbash,basher以及nologin,而且找出/etc/passwd 文件中用户名同shell名的行
useradd bash
useradd testbash
useradd basher
useradd -s /sbin/nologin login
grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwd
# 显示/var目录下所有以L开头,以一个小写字母结尾,且中间出现至少以为数字的文件或目录

ls -d /var/L*[0-9]*[[:lower:]]

# 显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录
ls -d /etc/[0-9]*[^0-9]
ls -d /etc/[[:digit:]]*[^[:digit:]] # 显示/etc目录下,以非字母开头,后面跟了一个字母及其其他任意长度任意字符的文件或目录
ls -d /etc/[^[:alpha:]][[:alpha:]]*
 

    次数匹配:

    用在要指定次数的字符后面,用于指定前面的字符要出现的次数

      *:匹配前面的字符任意次
      .*:匹配任意长度的任意字符
      \?:匹配前面的字符0次或1次
      \+:匹配前面的字符至少1次,至多不限
      \{M\}:匹配前面的字符M次
      \{M,\}:匹配前面的字符至少M次,至多不限
      \{M,N\}:匹配前面的字符至少M次,至多N次
    

    位置锚定:
      ^:行首锚定,用于模式的最左侧
      $:行尾锚定,用于模式的最右侧
      ^$:空白行,连space也不允许出现
      ^[[:space:]]*$:空白行或包含空白字符的行
      \<或\b:词首锚定,出现在单词的左侧
      \>或\b:词尾锚定,出现在单词的右侧
      \<PATTERN\>:完整匹配单词

# 去除nginx.conf里面的的空行和注释行

   grep -Ev "^$|#" nginx.conf
  ^$  空行
  |  或者
  #  注释行开头字符

    分组及引用:

      \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理
      

    后向引用:

      引用前面的分组括号中的模式所匹配的字符

分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部的变量中,这些变量的命名
    方式为\1,\2,\3
      \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配的字符
      \(ab\+\(xy\)*\)
      \1: ab\+\(xy\)*\
      \2: xy

  egrep及扩展正则表达式(Extandard RegExp):

    字符匹配:

      .:任意单个字符
      []:指定范围内的任意单个字符
      [^]:指定范围外的任意单个字符

    次数匹配:

      *:任意次
      ?:0次或1次
      +:其前一次最少一次或多次
      {m}:匹配其前字符m次
      {m,n}:匹配其前字符最少m次,最多n次

    位置锚定:
      ^:行首锚定,用于模式的最左侧
      $:行尾锚定,用于模式的最右侧
      ^$:空白行,连space也不允许出现
      \<或\b:词首锚定,出现在单词的左侧
      \>或\b:词尾锚定,出现在单词的右侧
   

    分组及引用:

    ():分组;括号内的模式匹配到的字符会被记录到正则表达式引擎的内部变量中
    后向引用:\1,\2,\3....
    或:
    | a|b a或者b

文本处理三剑客之 grep/egrep的更多相关文章

  1. Linux文本处理三剑客之grep及正则表达式详解

    Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...

  2. Linux文本处理三剑客之——grep

    一Linux文本处理三剑客之——grep Linux文本处理三剑客都支持正则表达式 grep :文本过滤( 模式:pattern) 工具,包括grep, egrep, fgrep (不支持正则表达式) ...

  3. shell 文本处理三剑客之 grep 和 egrep

    shell 三剑客之 grep 命令语法格式 grep 参数 案例 显示file中有python的行 grep python file 显示没有python的行,不忽略大小写 grep -v pyth ...

  4. 文本处理三剑客之 grep

    grep简介 grep(Global search REgular expression and Print out the line)是Linux上的文本处理三剑客之一,另外两个是sed和awk. ...

  5. 【Linux相识相知】文本处理工具之grep&bsol;egrep&bsol;fgrep及正则表达式

    常说Linux上有文本处理的三剑客,grep.sed和awk,本文就grep做出详细的描述,并引出正则表达式. grep NAME:打印模式匹配的行 SYNOPISIS: grep [OPTIONS] ...

  6. Linux 文本处理三剑客之grep

    文本处理都要使用正则表达式,正则表达式有: 基本正则表达式:grep或者egrep -G 扩展正则表达式:egreo或者grep -E Linux 文本处理三剑客: sed:stream editor ...

  7. linux文本处理三剑客之 grep

    文本处理无非是对文本内容做查看.修改等操作.Linux三剑客: grep.sed 和 awk 命令. 处理文本内容,用 Vim 编辑器不是很好吗?Vim 允许我们使用键盘.鼠标来对文本内容进行交互性地 ...

  8. Linux文本处理三剑客之grep

    简介 grep命令,用于在一个文本文件中或者从STDIN中,根据用户给出的模式(pattern)过滤出所需要的信息. grep以及三剑客中的另外两个工具sed和awk都是基于行处理的,它们会一行行读入 ...

  9. 文本处理三剑客之grep&amp&semi;正则表达式

    grep是一个文本过滤工具,它支持正则表达式,能把搜索匹配到的行打印出来.grep的全称是Global Regular Expression Print(全局正则表达式)使用权限是所有用户. 一.gr ...

随机推荐

  1. Spring(二)&lowbar;&lowbar;bean的装配

    Bean的装配: 在spring容器内拼凑bean叫做装配.装 配bean的时候,需要告诉容器哪些bean 以及容器如何使用依赖注入将它们配合在一起. 上下文定义文件的根元素是<beans&gt ...

  2. jQuery:cookie插件的使用

    Jquery插件就是在Jquery基础之上,开发的基于Jquery的javascript库. 在Jquery中,引入cookie插件后,可以很方便的定义某个cookie的名称,并设置cookie值.通 ...

  3. ---Shell的数组遍历

    1.  一一读入:  read -a A < <(echo a b c d e f g) 2. 遍历输出

  4. sql join 优化

    项目查询列表,需要新关联一张表,于是就让组下小伙更改了下sql语句,当再次进入列表查询时查询时间一下子就翻倍.那小伙找了半天没找原因. 于是我就打开代码查看,关联的一张表数据非常多,用的left jo ...

  5. DIV半透明,内层不受影响的代码

    <div style=" background:rgba(0, 0, 0, 0.1)"><br /> <img src="http://im ...

  6. 如何在Win8系统上建立WIFI热点

    1.首先将鼠标移到桌面左下角,单击右键,在弹出的快捷菜单中找到“命令提示符(管理员)”,点击 2.点击后,系统就以管理员权限打开了命令提示符,在命令提示符中输入以下命令“netsh wlan set ...

  7. OC基础&lpar;5&rpar;

    #pragma mark指令 description方法 OC多文件开发介绍 *:first-child { margin-top: 0 !important; } body > *:last- ...

  8. EL表达式语言

    EL (Expression Language) 目的:为了使JSP写起来更加简单.表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法. ...

  9. Unity游戏开发——自动为动画剪辑添加事件 之 最后几帧的事件不能被调用的问题

    最近在做一个根据配置表自动生成动画剪辑clip以及controller的功能.做法是根据配置表配置的动作以及每个动作的关键帧,自动为每个clip添加事件.这样做可以把动画的事件处理在游戏运行之前就计算 ...

  10. C语言作业(三)

    一.完成PTA上四题作业 二.具体解题 (一).A乘以B 1.实验代码 #include <stdio.h> int main() { int A,B,C; scanf("%d ...