zoukankan      html  css  js  c++  java
  • 文本处理三剑客和正则表达式

              本片文章将会有以下内容

    grep :文本过滤工具

    sed  :文本流编辑工具

    awk :文本报告生成器

    正则表达式


    由一类特殊字符及文本字符所编写的模式,这些字符不表示字面意义,而是表示控制或通配功能
    分两类 :
    基本正则表达式 BRE
    扩展正则表达式 ERE

              grep文本过滤工具

    grep支持基本正则表达式

    egrep 支持扩展正则表达式

    fgrep 不支持正则表达式

    作用:根据用户指定的 “模式(过滤条件)”对目标文本逐行匹配检查,打印匹配到的行

    模式:由正则表达式的元字符及文本字符所编写出的过滤条件

    语法: grep [OPTIONS] PATTERN [FILE...]

        常用选项
          -v : 反过滤
          -i :不区分大小写
          -o :只显示匹配到的字符串
          -q :静默执行
          -A 2 显示匹配到的行下2行
          -B 2 上2行
          -C 2 上下各2行

                sed文本流编辑工具


     sed [OPTION]... 'script' [input-file]...

      常用选项


        -n 阻止默认全输出
        -e 指定多个地址定界编辑命令
        -f FILE (编写时每行一个编辑命令,当编辑命令过多时使用)
        -r 扩展正则表达式
        -i 编辑源文件

    script :地址定界编辑命令

      地址定界

        1.空地址:
            对全文进行处理
        2.单地址:
            '*' : 指定行
            '/pattern/' 被模式匹配到的每一行
        3.地址范围
            '*,*' 指定的第几行和第几行
            '*,+*' 指定的行后下面第几行
        4,指定步长
            '*~*'

      编辑命令

        d: 删除
        p: 打印
        =: 打印行号
        !: 条件取反
        s///: 查找替换 g全局替换 p只显示替换成功的行
        a ext: 在行后追加text 支持 实现多行追加
        i ext: 在行前追加text 支持 实现多行追加
        c ext: 把匹配到的行替换为指定text
        w /file: 保存到指定的文件中 保存文件
        r /file: 将文件中的内容插入到匹配行后 文件合并

                   awk 整理完补齐

                    正则表达式


    基本正则表达式元字符:


    字符匹配
      . :匹配单个字符
        [ ] :匹配指定范围内的任意单个字符
        [^ ] : 匹配指定范围外的任意单个字符
        [[:digit:]] 所有的数字
        [[:lower:]] 所有小写字符
        [[:upper:]] 所有大写字符
        [[:alpha:]] 所有字符
        [[:alnum:]] 所有字符和数字
        [[:punct:]] 所有符号
        [[:space:]] 空白字符
        [[:blank:]] 空格和制表符


    次数匹配
        * 匹配前面的字符匹配任意次
        ? 匹配前面的字符一次或零次
        + 匹配前面的字符至少一次
        {m} 匹配指定次数
        {m,n} 匹配至少m次至多n次
        {0,n} 匹配多n次
        {n,0} 匹配至少n次


    位置锚定
        ^ 行首
        $ 行尾
        < 词首锚定
        > 词尾锚定


    分组
        (ha)* 如果不加 ( )则*只会对a匹配任意次

        分组括号中的字符会被正则表达式引擎自动记录于内部变量中
        1 第一个括号匹配到的内容
        2 第二个括号匹配到的内容
    .....
    示例
        有一个文件 他的内容如下
    HE loves hls love
    HE likes hls love
    she likes her liker
    she loves her liker

        使用 l..e作为模式会匹配全部的内容
    cat love.txt | grep "l..e"
    HE loves hls love
    HE likes hls love
    she likes her liker
    she loves her liker

        这里使用后向应用:引用前面分组括号中匹配到的字符

    cat love.txt | grep "(l..e).*1"
    HE loves hls love
    she likes her liker



        a|b a或者b
        C|cat C或者cat
        (C|c)at Cat或者cat

    扩展正则表达式在使用一些元字符时可以不用转义 ( ? + {} () | )

    也有人这样理解

    “基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符(meta charactor)的区别而已。(对,就是这么简单)”

    BRE:只有^$.[]* 是元字符

    ERE:^$.[]*+(){}?|都是元字符


                      文本查看及处理工具

    wc: 统计文件的行数、单词数、字符数
      wc [OPTIONS] FILE...
    常用选项
        -l 仅显示行数
        -w 仅显示单词数
        -c 仅显示字节数

    cut 显示特定字段
      cut OPTIONS.. [FILE]
    常用选项
        -d 'CHAR' 以制定字符为分隔符
        -f FILEDS 显示特定字段
          1 : 指定单个字段
          1-5 : 连续多个字段
          2,4 : 指定字段

    sort 排序
      sort [OPTIONS]... [FILE]...
    常用选项
        -t 指定分隔符
        -k * 用于排序比较的字段
        -n 根据数值大小进行排序
        -r 逆序排序
        -f 忽略字符大小写
        -u 重复的行只保留一份

    uniq 报告或移除重复的行
      uniq [OPTIONS]
    常用选项
        -c 统计每一行重复出现的次数
        -u 仅显示未重复行
        -d 仅显示重复过的行


    diff 生成补丁

      diff FILE1 FILE2 > PATH.FILE
    常用选项
      -u 显示要求改的上下文 默认3行

    patch 向文件打补丁

      patch -i PATH.FILE OLDFILE

      patch OLDFILE < PATH.FILE

  • 相关阅读:
    数论练习(5)——青蛙的约会(扩gcd)
    数论练习(4)——同余方程(扩gcd)
    数论练习(3)——相同后三位(快速幂)
    s if标签
    spring获取webapplicationcontext,applicationcontext几种方法详解
    Java精确测量代码运行时间 代码执行时间 纳秒 nanoTime
    java中使用二进制进行权限控制
    hibernate注解配置举例说明
    js日期处理
    Spring 简单而强大的事务管理功能
  • 原文地址:https://www.cnblogs.com/linuxys/p/13052217.html
Copyright © 2011-2022 走看看