背景

目前大部分的项目都是部署在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

测试效率加倍提升!shell 高阶命令快来 get 下!的更多相关文章

  1. Linux 高阶命令进阶(一)

    Linux 高阶命令进阶 (一)输出重定向 1. > :正确覆盖输出,会覆盖掉原先的文件内容 把文本写入文档中                # vim test                 ...

  2. Linux高阶命令进阶

    1. 输出重定向 > (1>):覆盖输出,会覆盖掉原先的文件内容 >> (1>>) :追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加 2> :错误输 ...

  3. TF卡速度测试对比 Class数越高速度越快

    存储卡(TF卡)是手机扩展存储的大杀器,让你多装n部学习资料,多装n个外语听力练习.除了装东西外,存储卡性能不佳也会影响手机的整体性能以及体验的.本文主要针对Android手机,我是懒人,但我讨厌懒人 ...

  4. React 精要面试题讲解(五) 高阶组件真解

    说明与目录 在学习本章内容之前,最好是具备react中'插槽(children)'及'组合与继承' 这两点的知识积累. 详情请参照React 精要面试题讲解(四) 组合与继承不得不说的秘密. 哦不好意 ...

  5. React躬行记(10)——高阶组件

    高阶组件(High Order Component,简称HOC)不是一个真的组件,而是一个没有副作用的纯函数,以组件作为参数,返回一个功能增强的新组件,在很多第三方库(例如Redux.Relay等)中 ...

  6. Javascript 常见的高阶函数

    高阶函数,英文叫 Higher Order function.一个函数可以接收另外一个函数作为参数,这种函数就叫做高阶函数. 示例: function add(x, y, f) { return f( ...

  7. centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课

    centos   LB负载均衡集群 三种模式区别 LVS/NAT 配置  LVS/DR 配置  LVS/DR + keepalived配置  nginx ip_hash 实现长连接  LVS是四层LB ...

  8. HashMap高阶用法,十倍提升开发效率

    HashMap在工作中使用非常频繁,其实在JDK1.8的时候新增一些更高阶的用法,熟练使用这些方法可以大大提升开发效率,写出更简洁优美的代码. 1. get方法指定返回默认值(getOrDefault ...

  9. Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)

    1.课程环境 本课程涉及的技术产品及相关版本: 技术 版本 Linux CentOS 6.5 Java 1.7 Hadoop2.0 2.6.0 Hadoop1.0 1.2.1 Zookeeper 3. ...

随机推荐

  1. python 多进程并发demo

    outline 下午需要简单处理一份数据,就直接随手写脚本处理了,但发现效率太低,速度太慢,就改成多进程了: 程序涉及计算.文件读写,鉴于计算内容挺多的,就用多进程了(计算密集). 代码 import ...

  2. Java内功心法,创建型设计模式包括哪些

    1. 单例(Singleton) Intent 确保一个类只有一个实例,并提供该实例的全局访问点. Class Diagram 使用一个私有构造函数.一个私有静态变量以及一个公有静态函数来实现. 私有 ...

  3. Eureka重要对象简介

    在进行分析EurekaClient和EurekaServer之间通信的源码之前,我们首先需要熟悉一下几个实体类 InstanceInfo 这个类代表着EurekaClient实例,客户端向服务端请求注 ...

  4. LIBRARY_PATH和LD_LIBRARY_PATH

    LIBRARY_PATH是编译时指定的路径. LD_LIBRARY_PATH是运行时指定的动态链接库所在目录. 在运行一个可执行文件之前,可以通过ldd a.exe命令查看a.exe所依赖的动态链接库 ...

  5. 【转载】C#里怎么把string类型转换成double

    在C#的数字计算过程中,有很多的方法可以将字符串String类型的变量转换为double类型,double.Parse方法.Convert.ToDouble方法.double.TryParse方法等都 ...

  6. 很全的vue插件汇总,赶紧收藏下(转)

    Vue是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件特别整理了常用的vue插件,来了个大汇总,方便查找使用,便于工作 ...

  7. 隐马尔科夫模型(Hidden Markov Models) 系列之一

    转自:http://blog.csdn.net/eaglex/article/details/6376826 介绍(introduction) 通常我们总是对寻找某一段时间上的模式感兴趣,这些模式可能 ...

  8. android studio学习---模板

    Android Studio还为开发人员提供多种模板选项,从而大大提升开发速度.这些模板能自动创建Activity以及必要的XML文件.大家还可以利用这些模板创建出较为基础的Android应用程序,并 ...

  9. ThinkPHP3.2.3:使用模块映射隐藏后台真实访问地址(如:替换url里的admin字眼)

    例如:项目应用目录/Application下模块如下,默认后台模块为Admin 现在需要修改后台模块的访问地址,以防被别有用心的人很容易就猜到,然后各种乱搞... (在公共配置文件/Applicati ...

  10. 关于paths.get()方法的参数的使用

    背景:项目中使用了一个第三方的jar包,里面用到了paths.get("xxx"),xxx表示的是配置文件,提供给用户自己制定的 问题就是这个xxx文件应该放到项目的什么地方去,测 ...