grep

  • Linux上文本处理三剑客

    • grep:文本过滤(模式:pattern)工具
      • 家族:grep,egrep,fgrep
    • sed: stream editor,文本编辑工具
    • awk:Linux上实现gawk,文本报告生成器
  • grep:Global search REgular expression and Print out the line

    • 作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查:打印匹配到的行
    • 模式:有正则表达式字符及文本字符所编写的过滤条件
    • REGEXP:有一类特殊字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制和通配的功能
    • 分两类:
      • 基本正则表达式:BRE
      • 扩展正则表达式:ERE
    • 正则表达式引擎:
      • grep [OPTION] PATTERN [FILE]…
      • 常用选项:
        • –color=auto:对匹配到的文本着色显示
        • -v:显示不能够被pattern匹配到的行
        • -i:忽略字符大小写
        • -o:仅显示匹配到的字符串
        • -q:静默模式,不输出任何信息
        • -A #:after,后#行
        • -B #:before,前#行
        • -C #:context,前后各#行
    • 基本正则表达式元字符
      • 字符匹配:
        • .:匹配任意单个字符
        • []:匹配指定范围内的任意单个字符
        • [^]:匹配指定范围内的任意单个字符
          • [:digit:],[:lower:],[:upper:],[:alpha:],[:punct:],[:space:],[:alnum:]
      • 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
        • *:匹配前面的字符任意次(贪婪模式)
        • .*:匹配任意长度的任意字符
        • \?:匹配前面的字符0或1次,即前面的字符可有可无
        • +:匹配其前面的字符至少1次
        • {m}:匹配前面的字符m次
        • {m,n}:匹配前面的字符至少m次,至多n次
          • {0,n}:匹配前面的字符至多n次
          • {m,1}:匹配前面的字符至少m次
      • 位置锚定:
        • ^:行首锚定,用于模式的最左侧
        • $:行尾锚定,用于模式的最右侧
        • ^PATTERN$:用于模式匹配整行
          • ^$:空行
          • ^[[:space:]]*$
        • \<或\b:词首锚定,用于单词模式的左侧
        • >或\b:词尾锚定,用于单词模式的右侧
        • \<>:匹配整个单词
      • 分组:
        • ():将一个或多个字符捆绑在一起,当作一个整体进行处理,例如:(xy)*ab
        • Note:分组括号中匹配搭配的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:
          • \1:从左侧起,第一个左括号以及与之匹配的有括号之间的模式所匹配的字符
            • (ab+(xy)*):
              • \1:ab+(xy)*
              • \2:xy
        • 后向引用:引用前面的分组括号中模式左匹配的字符,而非模式本身