• 测试效率加倍提升!shell 高阶命令快来 get 下!


    背景

    目前大部分的项目都是部署在Linux系统上,作为测试,掌握常用Linux命令是必须的技能。很多的工作了好几年的测试人员可能还只会简单的ls、cd、cat等等这些命令,这些命令是可以应付工作的大部分场景。但是真正要提升测试效率、提高自己的核心竞争力,这些还是远远不足的。在测试工作中很多情况下我们需要同文本文件打交道,如分析/统计日志、自动化部署等等,今天给大家介绍几个很实用的高阶文本处理命令。

    cut

    此命令的主要作用是来选取一段内容中我们想要获取的,通常选择信息是针对与“行”来分析的,擅长处理“以一个字符间隔”的文本内容。
    语法格式:

    $ cut -c 字符区间
    $ cut -d “分隔字符” -f fields  
    
    参数 说明
    -c 以字符为单位进行分割
    -d 自定义分隔符,默认为制表符
    -f 与-d一起使用,指定显示哪个区域

    示例:
    新建练习文件,内容如下

    [root@localhost shellTest]# cat test.txt 
    01 nick 20
    02 rose 25
    03 jack 30
    04 tom 27
    

    1、显示每行第四个字符之后的内容

    [root@localhost shellTest]# cut -c 4- test.txt 
    nick 20
    rose 25
    jack 30
    tom 27
    #说明:
    # 4- 表示从第4个字符开始
    # 4-10 表示从第4个字符到第10个字符
    # -4 表示截取前4个字符
    

    2、以“空白字符”作为分隔符,显示第二列内容:

    [root@localhost shellTest]# cut -d " " -f 2 test.txt 
    nick
    rose
    jack
    tom
    

    sort

    将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按照ASCII码值进行比较,最后将他们按升序输出。
    语法格式:

    $ sort [-nrtk] [file]  
    
    参数 说明
    -n 纯数字进行排序,默认是以文字形态来进行排序的
    -r 反向排序
    -t 分隔符,默认是以tab键来分隔
    -k 以那个区间来进行排序

    示例:
    还是依据上述的test.txt文件
    1、以空白字符作为分隔符,将第二列内容进行升序排列

    [root@localhost shellTest]# sort -t " " -k 2 test.txt
    03 jack 30
    01 nick 20
    02 rose 25
    04 tom 27
    

    2、以空白字符作为分隔符,将第三列年龄字段进行降序序排列

    [root@localhost shellTest]# sort -t " " -k 3 -nr test.txt
    03 jack 30
    04 tom 27
    02 rose 25
    01 nick 20
    # 说明:
    # 年龄字段是数字类型,所以需要加参数n
    # 默认sort是升序排列,加参数r实现降序排列
    

    uniq

    过滤文件中重复部分,经常结合sort一起使用(重复数据相邻的)
    语法格式:

    $ uniq [-icu]
    
    参数 说明
    -i 忽略大小写字符的不同
    -c 文本行出现的次数
    -u 只显示不重复的行

    示例:
    新建文本文件如下

    [root@localhost shellTest]# cat test2.txt 
    01 nick 20
    02 tom  25
    03 jack 30
    04 rose 25
    03 jack 30
    

    1、去除姓名重复的数据
    结合sort排序和uniq去重(去重的前提是要重复的数据相邻)

    [root@localhost shellTest]# sort test2.txt | uniq
    01 nick 20
    02 tom  25
    03 jack 30
    04 rose 25
    

    2、统计每行出现的次数

    [root@localhost shellTest]# sort test2.txt | uniq -c
          1 01 nick 20
          1 02 tom  25
          2 03 jack 30
          1 04 rose 25
    

    wc

    统计文件里面有多少行,多少单词,多少字符
    语法格式:

    $ wc [-lwm]
    
    参数 说明
    -l 仅列出行数
    -w 仅列出多少字(英文单词)
    -m 多少字符

    示例:
    还是以test2.txt文件举例
    1、统计文件中的行数

    [root@localhost shellTest]# wc -l test2.txt
    5 test2.txt
    

    2、统计有多少个字符

    [root@localhost shellTest]# wc -m test2.txt
    55 test2.txt
    

    综合示例

    上面的demo介绍了这几个命令的基本用法,接下来我们尝试写一个实战例子
    域名的信息如下所示,要求:将域名取出并进行计数,按照域名出现的次数进行降序排列

    [hhy@localhost shellTest]$ cat domain.txt 
    http://www.lemfix.com/index.html
    http://www.lemfix.org/1.html
    http://post.lemfix.org/index.html
    http://mp3.lemfix.org/index.html
    http://www.lemfix.org/3.html
    http://post.lemfix.org/2.html
    

    步骤分解:
    1、先分离出来域名

    [hhy@localhost shellTest]$ cut -d "/" -f 3 domain.txt 
    www.lemfix.com
    www.lemfix.org
    post.lemfix.org
    mp3.lemfix.org
    www.lemfix.org
    post.lemfix.org
    

    2、再进行比较排序

    [hhy@localhost shellTest]$ cut -d "/" -f 3 domain.txt | sort 
    mp3.lemfix.org
    post.lemfix.org
    post.lemfix.org
    www.lemfix.com
    www.lemfix.org
    www.lemfix.org
    

    3、统计每行的出现次数

    [hhy@localhost shellTest]$ cut -d "/" -f 3 domain.txt | sort | uniq -c 
          1 mp3.lemfix.org
          2 post.lemfix.org
          1 www.lemfix.com
          2 www.lemfix.org
    

    4、根据第一列字段(数字)进行降序排列

    [hhy@localhost shellTest]$ cut -d "/" -f 3 domain.txt | sort | uniq -c | sort -k 1 -nr
          2 www.lemfix.org
          2 post.lemfix.org
          1 www.lemfix.com
          1 mp3.lemfix.org
    
  • 相关阅读:
    Linux文件查找
    Linux之正则表达式
    linux文本处理
    Linux压缩归档管理
    spring-security问题记录
    mybatis-plus&springboot
    Mysql8- Public Key Retrieval is not allowed
    MySQL 5.7安装(linux)
    git把本地代码上传(更新)到github上
    linux相关(find/grep/awk/sed/rpm)
  • 原文地址:https://www.cnblogs.com/yyoba/p/11535743.html
Copyright © 2020-2023  润新知