首页 > 代码库 > Linux学习笔记:grep、egrep

Linux学习笔记:grep、egrep

文本处理三剑客:

  grep系:grep 、egrep 、fgrep ,文本搜索工具,基于“PATTERN"对于给定的文本进行模糊搜索,grep系默认工作于贪婪模式下。

  sed:Stream EDitor,流编辑器,行编辑器,文本编辑工具;

  awk:gawk——GUN awk,文本格式化工具,文本报告生成器,文本处理的编程语言;

 

grep系:

  grep:利用正则表达式进行全局搜索并将匹配的行显示出来;

    grep [OPTIONS] PATTERN [FILE.....]

      PATTERN:过滤条件,是由正则表达式元字符以及没有特殊含义的文本字符组成的;

        正则表达式的元字符:

          会被正则表达式引擎解释为特殊含义;

          pcre——perl语言的正则表达式引擎;最完整的正则表达式引擎


        基本的正则表达式:BRE

        扩展的正则表达式:ERE


    grep默认仅支持基本正则表达式;

    egrep默认仅支持扩展正则表达式;

    fgrep默认不开启正则表达式引擎;


        文本字符:

          只具备字符表面含义的那些字符;

      常用选项:

        -i,--ignore-case:忽略文本字符的大小写;

        -v,--invert-match:反向匹配;最终显示的结果是PATTERN不能成功匹配的行;

        -c,--count:计数,统计匹配PATTERN的所有的行数;

        -o,--only-matching:关闭贪婪模式,仅显示PATTERN能够匹配的内容。

        -q,--quiet,--silent:安静模式,不输出任何结果

        --color=auto将结果高亮显示。。

        -E,相当于egrep

        -F,--fixed-strings,--fixed-regexp:grep -F相当于fgrep

        -G,相当于grep 基本的正则表达式

        -P,--Perl-regexp:使用PCRE引擎。

        -A num:在显示匹配PATTERN的行的同时显示其前多少行内容,

        -B num:在显示匹配PATTERN的行的同时显示其后多少行内容;

        -C num:在显示匹配PATTERN的行的同时显示其前后多少行内容;


    PATTERN:

      正则表达式元字符:

        基本的正则表达式元字符:

        GLOBBING-----简化版的正则表达式:[] ? * 


        字符匹配:

          .:匹配任意单个字符

          下列所有的字符集都可以放置在[]之中用于匹配单个字符。

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

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

          [:lower:]

          [:upper:]

          [:digit:]

          [:alpha:]

          [:space:]

          [:alnum:]

          [:punct:]

          [:blank:]

          [:xdigit:]:所有的十六进制数字;

          a-z:所有的小写字母

          A-Z:所有的大写字母

          0-9:标识所有的十进制数字


        次数匹配:该类字符之前的那个字符可以出现的次数;

          *:其前面的字符可以出现任意次(0次,1次或多次);

          \?:其前面的字符可有可无(0次或1次)。

          \+:其前面的字符至少出现一次(一次或多次)

          \{m\}:其前面的字符必须出现m次。

          \{m,n\}:其前面的字符至少出现m次最多出现n次。(m<n)

          \{0,n\}:其前面的字符至少出现0次,至多出现n次;

          \{m,\}:其前面的字符至少出现m次,多多益善。


      在正则表达式中,表示任意长度任意字符的方式:.*


        位置锚定字符:

          行锚定:

            行首锚定:^

            行尾锚定:$

          字锚定:

            字首锚定:\<或者\b

            字尾锚定:\>或者\b

            \b:旧版本中的锚定方法,所以建议不使用;


          对于正则表达式引擎来说,字是由非特殊字符组成的连续字符串; 


        分组与引用字符:

          \(PATTERN\):将PATTERN所匹配到的所有字符当做一个不可分割的整体来处理。


          在正则表达式引擎中有一系列的内置变量,这些变量会保存所有所有分组内的字符信息,用于后向引用;这些变量依次是:\1,\2,\3.......


          pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)


          \1:pattern2  第一组小括号中的pattern匹配到的字符;

          \2:pattern4  第二组小括号中的pattern匹配到的字符;

          \3:pattern5


          或:

            \|



            注意:或字符将其左右两边的字符当做整体对待;


            A\|americam :A 或 american


        默认情况下,grep命令后面只允许一个pattern;

        如果想要在一次grep所搜过程中写多个pattern,则需要使用-e选项,每个PATTERN前面加一个-e


        将所需要的PATTERN写入到一个文件中,保证每行只有一个PATTERN,我们就可以使用-f file方式来实现多PATTERN选项。



  egrep:

    egrep [OPTIONS] PATTERN [FILE....]

      扩展的正则表达式元字符:

        字符匹配:

          .

          []

          [^]

        次数匹配:

          *

          ?

          +

          {m}

          {m,n}

          {m,}

          {0,n}


        位置锚定:

          ^

          $

          \<,\b

          \>,\b


        分组和引用:

          ()

          \1,\2,\3...


        或:

          |


  fgrep:PATTERN中所有的字符都被当做文本字符来处理;   



  其他的文本处理命令:

    wc:

      wc [OPTION] ... [FILE]...

        -l:只显示行数

        -w:只显示字数

        -c:只显示字符数


    cut:(剪辑)

      能够被cut命令修改的文件一般都是具有一定结构或格式的文本文档。

      cut OPTION... [FILE]...

        -d, --delimiter=DELIM :指定在实施修剪操作时所依赖的分隔符,默认是空白符;

        -f, --fields=LIST :根据定义的分隔符来指定字段的编号。

          地址定界使用方法:

          #:选择被指定的单个字段

          #,#:离散的多个被指定的单个字段

          #-#:连续的多个被指定的字段

        --output-delimiter=STRING :指定输出分隔符


  awk:

    awk -F “DELIMITER” ‘[/PATTERN/]{print $1,$2.$3...$NF}’ FILE...

      -F “DELIMITER”:指定字段分隔符,默认为空白字符;

      $1,$2,$3....,$NF:根据字段分隔符切割出来的文本片段都存放在相应的内部变量中;


  sort:sort lines of text files ,将文本文件按行继续排序,默认排序规则是按ASCII表中的字符顺序进行,这个排序标准可修改。

    -r,--reverse:逆向排序

    -R,--random-sort:随机排序,这种随机算法比较简陋

    -u, --unique:重复出现的行只显示一行,

    -n, --numeric-sort:按照数字数值大小排序。

    -t, --field-separator=SEP:指定字段分隔符

    -k, --key=KEYDEF:指明根据哪个关键字段进行排序,一般和-t同时使用。


  uniq:report or omit repeated lines

     -d, --repeated:只显示重复出现的行,而且重复出现的行只显示一行。。

     -u, --unique:只显示不重复的行。

     -c, --count:在每行以前缀的方式显示重复行的重复次数;


  diff:compare files line by line

    同一个文件的不同修改版本;打补丁;


  patch:apply changes to files

     patch [-R] [-i patchfile] [file]


Linux学习笔记:grep、egrep