zoukankan      html  css  js  c++  java
  • (一)linux三剑客之grep

    给自己提出以下6个问题,看自己是否真正掌握了grep

    [1] grep 是什么? 

    [2] grep 有什么作用 ?

    [4] grep 常用于何处 ?

    [5] grep 的基本用法 ?

    [6] grep 实例用法 ?

    [6] grep 技术常用【收藏】


     [1] grep 是什么?

    • grep是一个文本搜索工具;
    • grep (global regular expression print,全局正则表达式输出) 的搜索工具; 

    它的家族有三大类:grep 、egrep  、fgrep 

        通常我们可以这样认为:  egrap相当于grap -E , fgrap 相当于 grap -F

        egrep其实是grap的优化版,改良了许多传统 grep 不能或不便的操作:

        例如:

        grep 之下不支持 ? 与 + 这两种 modifier, 但 egrep 则可。
        grep 不支持 a|b 或 (abc|xyz) 这类"或一"比对, 但 egrep 则可。
        grep 在处理 {n,m} 时, 需用 { 与 } 处理, 但 egrep 则不需。

         fgrap 不作RE处理,表达式仅作一般字符串处理,所有meta失去功能


     【2】grep 的作用?

    •  grep 最大的作用就是它得搜索功能!将匹配到内容这一行输出,即搜索到的内容列出,并不会改动里面内容,并且不能根据目录进行搜索;
    比如:one.c内容
    void class()
    {
      printf("oneone");
    }

    grep "class" one.c
    - void class() //结果

    若是用grap进行目录搜索会报错
    grap "class" ./
    grep: ./: Is a directory

    【3】grep 常用于何处 ?

    常用于文件搜索

    【5】grep 的基本用法?

    grep "搜索内容"  搜索文本

    这里很值得深入思考的是,grep后面跟着双引号,单引号,不带引号,有什么区别?

    以及,grep的正则表达式后面跟着双引号,单引号又有什么区别? 可以不带引号吗?

    为此我也研究了很久,得出结论

    grep “linux"  oytt.c  //双引号

      

    grep 'linux'  oytt.c  //单引号

      单引号是将引号的内容原封不动的搜索出来

    grep linux    oytt.c  //不带引号

      这样写和上面两种区别不大,但是若是想搜索有空格的子的字符串就无能为力了,比如想在oytt.c文件中搜索含有oytt younger的文字

    grep oytt younger oytt.c就会报错No such file or directory

    因此若是搜索连续的字符串,数字,变量,和单引号的效果是一样的,若是想搜索非连续的,则需要用单引号或者双引号。

    -e : 使用正则搜索
    -i  : 不区分大小写
    -v : 查找不包含指定内容的行
    -w: 按单词搜索
    -c: 统计匹配到的次数
    -n: 显示行号
    -r: 逐层遍历目录查找
    -A: 显示匹配行及后面多少行, 如: -A3, 则表示显示匹配行及后3行
    -B: 显示匹配行及前面多少行, 如: -B3, 则表示显示匹配行及前3行
    -C: 显示匹配行前后多少行, 如: -C3, 则表示显示批量行前后3行
    --color: 匹配到的内容高亮显示
    --include: 指定匹配的文件类型
    --exclude: 过滤不需要匹配的文件类型

    【6】grep 的实例用法【收藏】

      1. grep -A

      2. 显示行号之后的行号
        1. grep -A 'one' oytt.txt

        2. grep -A / grep -B/ grep -C 都是一套类似的用法

      3. grep -a

      4. 二进制文件不被忽略
        1. grep -a 'one' oytt.txt

        2. Binary file one.c matches 若是有这种报错情况,就需要grep -a

      5. grep -v

      6. 反向查找,也就是输出不包含指定的内容
        1. grep -v 'one' oytt.txt

        2. 输出除了one以外的其它数据

        3. 可以配合其它语句使用 cat oytt.txt | grep -v 'one' 非常实用

      7. grep -l

      8. 列出包含该内容的文集
        1. grep -l oytt1.txt oytt2.txt

        2. 不能根据路径,必须一一把文件列出来

      9. grep -n

      10. 匹配行号
        1. grep -n 'one' oytt.txt

      11. grep -e

        1. grep -e 'one' -e 'two' oytt.txt
        2. 同时查找多个目标
      12. grep -c 计算匹配到的行数量

        1. grep -c 'one' oytt.txt  //结果:1
      13. grep -w 

        1. grep -w "one" oytt.txt

        2. 整个字符串匹配,只能搜到到one的单词,而不能搜索到类似oneFunc的单词

    做一个优秀的程序媛
  • 相关阅读:
    第七周作业
    第六周作业
    第五周作业
    第四周作业
    第三周作业
    第二周作业
    第一周作业
    老鼠与盈利
    币值转换
    2015 USP-ICMC gym 100733 J. Summer Wars
  • 原文地址:https://www.cnblogs.com/oytt/p/12852621.html
Copyright © 2011-2022 走看看