• 《linux 字符处理》- grep/sort/uniq/tr/paste/sed/awk


    一:基本

    • 字符处理主要是文本的搜索和处理。
    • 搜索也主要使用到了 管道 作为媒介。

    二: grep 搜索文本

      - 基本语法 (可以在文本中使用正则进行搜索)

        - grep [-incv] '文本' 文件

          - i 不区分大小写

          - c 匹配行数

          - n 输出匹配行数

          - v 反向匹配

      - 正则使用

        - grep '^[123]' index.txt  (搜索在开头为123的行)

    三: sort 排序

      - 基本语法

        - sort [-ntkr] 文件名

          - n 数字排序

          - t 指定分隔符

          - k 指定第几列

          - r 反向排序

      - 指定排序

        - -t -k 可以指定排序方式

        - 比如这里,我新建了一个 sort.txt 

        • [mttyk]$ cat sort.txt
          b:1-3
          a:2-2
          f:4-1
          h:8-9
          d:3-6
          h:8-9
          g:6-7

        - 在没有指定条件时候,sort 默认第一个字符正序

        • [mttyk]$ sort sort.txt
          a:2-2
          b:1-3
          d:3-6
          f:4-1
          g:6-7
          h:8-9
          h:8-9

        - 如果想使用第二例的数字来进行排序的话

        • [mttyk]$ sort -t ":" -k 2 sort.txt
          b:1-3
          a:2-2
          d:3-6
          f:4-1
          g:6-7
          h:8-9
          h:8-9

          -t 等于切割了两组
          1组 切割符 第二组
          b : 1-3
          a : 2-2
          ......

    四: uniq 删除重复内容

      - 基本语法

        - uniq [-ic] 文件

          - i 忽略大小写

          -c 显示重复行数

      - 注意

        - uniq 语法应该是和 sort 一起使用的,因为不连续的重复数据,uniq 是无法删除

        - 所以需要 sort 排序后删除/统计

      • 文件
            h:8-9
            d:3-6
            h:8-9
        
        直接 uniq 删除重复
            [mttyk]$ uniq sort.txt
            h:8-9
            d:3-6
            h:8-9
        无法删除
        
        排序后 uniq 删除重复
            [mttyk]$ sort sort.txt | uniq
            d:3-6
            h:8-9

    五: tr (文本转换/删除)

       - tr 只能在管道中处理字符,源文件并不能修改

      - 基本语法 (支持正则)

        - 删除指定字符  tr -d "[1-9]"

        - 转换指定字符 tr "[a-z]" "[A-Z]"

      - 替换字符时,文本中有多少个字符,就只能替换多少个字符

    六:sed (文本处理) ( -i 可改变源文件)

      - 基于 行  的 文本处理工具

      - 基本语法

        - sed [options] 'commend' file

      - 删除操作 (/d)

        - 删除指定行    sed '1d' index.txt (删除 index.txt 文件下的第1行)

        - 删除指定区间 sed '1,2d' index.txt (删除 index.txt 文件下的第1-2行)

        - 删除最后一行 sed '$d' index.txt (删除 index.txt 文件下的最后一行)

        - 删除空行       sed '/^$/d' index.txt (删除 index.txt 文件下的空行)

      - 查找替换 (s/)

        - 部分替换 sed 's/L/l/1' index.txt (替换 index.txt 文件下的L为l) (只替换一行中的第一个)

        - 全部替换 sed 's/L/l/g' index.txt (替换 index.txt 文件下的L为l) (一行不管有多少个,全部替换)

     

      - 字符替换 (y/)

        - 批量替换 sed 'y/abcd/ABCD/' index.txt (替换 index.txt 文件下的a为A, b为B, c为C,d为D) 

      - 文本插入 (i 匹配行后插入) (a 匹配行前插入)

        - 指定行插入 sed '2 i insert' index.txt  (在 index.txt 文件 第2行 插入文本) 

    七:awk (文本处理)

      - 基于 列 的文本处理工具

      - 基本语法

        - -F 指定分隔符

      - 基本操作

        - 查看文本域数量

          - awk '{print NF}' index.txt  (查看 index.txt 文件的切割域) (内部变量 NF 实现)

        - 求和

          - awk 'BEGIN{total=0}{total+=$1}END{print total}' index.txt

          - awk 'BEGIN{total=0;num=0}{num+=$1;total+=1}END{print total/num}' index.txt

  • 相关阅读:
    正则表达式尽量写的精简,提高运行效率
    IndexError:string index out of range
    Python3 字符编码
    python3字符编码错误
    pip
    正则贪婪和非贪婪
    [Ss]+ 可以匹配多行html,最常用的还是.*?
    正则,分组,字符集,使用场景
    使用jodis连接codis的时候报异常:Exception in thread "main" redis.clients.jedis.exceptions.JedisException: Proxy list empty
    codis 的dashboard服务无法启动 提示pid已经运行
  • 原文地址:https://www.cnblogs.com/25-lH/p/10388332.html
Copyright © 2020-2023  润新知