写点什么

软件测试 / 测试开发丨 Linux 数据处理三剑客学习笔记

作者:测试人
  • 2023-07-19
    北京
  • 本文字数:1818 字

    阅读完需:约 6 分钟

免费领取:测试资料+性能测试+接口测试+自动化测试+测试开发+测试用例+简历模板+测试文档

本文为霍格沃兹测试开发学社学员学习笔记分享

原文链接:https://ceshiren.com/t/topic/26282

一、Linux 三剑客之 grep

1、 内容检索

  • 获取行(单行) grep pattern file

  • 获取内容 grep -o pattern file

  • 获取上下文 grep -A -B -C pattern file





2、 文件检索

  • 递归搜索 grep pattern -r dir/

  • 展示匹配文件名 grep -H 111 /tmp/1

  • 只展示匹配文件名 grep -l 111 /tmp/1


3、 范围约束

  • man grep 命令可以找到 grep 的主流用法

  • 忽略大小写 grep -i pattern file

  • 不显示匹配的行 grep -v pattern file

  • 使用扩展正则表达式 grep -E pattern file

  • 文件范围和目录范围约束 grep 111 -r /tmp/demo/ --include "11*"

4、 进程检索

  • 进程过滤场景比较特殊,需要注意

  • grep 本身会开启新进程,所以需要单独过滤掉 grep 进程

ps -ef | grep ssh(使用管道连接,两个命令ps、grep都会同时执行,两个进程都会启动,使用grep进行过滤,这个命令也在执行,它里面也有ssh,所以带有ssh的进程都被搜索出来了)  503  2507     1   0 29 821  ??         0:00.08 /usr/bin/ssh-agent  503 50022 11154   0  8:11下午 ttys002    0:00.00 grep ssh
ps -ef | grep ssh | grep -v grep(通过 -v 过滤掉包含grep的进程) 503 2507 1 0 29 821 ?? 0:00.08 /usr/bin/ssh-agent
复制代码

二、Linux 三剑客之 awk

1、 awk 基本语法

  • awk 是 linux 下的一个命令,同时也是一种语言解析引擎

  • awk 具备完整的编程特性。比如执行命令,网络请求等

  • 精通 awk,是一个 linux 工作者的必备技能

  • 语法 awk 'pattern{action}'

2、 awk 上下文变量

  • 开始 BEGIN 结束 END

  • 行数 NR

  • 字段与字段数 11 12 … $NF NF

  • 整行 $0

  • 字段分隔符 FS

  • 输出数据的字段分隔符 OFS

  • 记录分隔符 RS

  • 输出字段的行分隔符 ORS

3、 字段变量用法

  • -F 参数指定字段分隔符,可以用|指定多个- 多分隔符 -F ‘<|>’

  • BEGIN{FS=“_”} 也可以表示分隔符

  • $0 代表当前的记录

  • $1 代表第一个字段

  • $N 代表第 N 个字段

  • $NF 代表最后一个字段

  • $(NF-1) 代表倒数第二个字段

4、 pattern 表达式

  • 正则匹配 $1~/pattern/ /pattern/

  • 比较表达式 $2>2 $1=="b"

5、 awk pattern 匹配表达式案例

  • 开始和结束 awk 'BEGIN{}END{}'

  • 正则匹配整行匹配 awk '/Running/'字段匹配 awk '$2~/xxx/'

  • 行数表达式取第二行 awk 'NR==2'去掉第一行 awk 'NR>1'

  • 区间选择 awk '/aa/,/bb/'awk '/1/,NR==2'

6、 action 行为表达式 {action}

  • 打印 {print $0} {print $2}

  • 赋值 {$1="abc"}

  • 处理函数

  • 原始内容 $0

  • 更新后内容 {$1=$1;print $0}

7、 单行转多行

echo 1:2:3 | awk 'BEGIN{RS=":"}{print $0}'123
复制代码

8、 多行变单行

echo '123' | awk 'BEGIN{RS="";FS="\n";OFS=":"}{$1=$1;print $0}'1:2:3
复制代码


echo '123' | awk 'BEGIN{ORS=":"}{$1=$1;print $0}'1:2:3:
复制代码

9、 计算平均数

echo '1,102,203,30' | awk 'BEGIN{total=0;FS=","}{total+=$2}END{print total/NR}'20
复制代码

10、 awk 的词典结构 array

  • array 是稀疏矩阵,类似 python 的词典类型

  • 统计多家机构的营业额

  • 统计多家机构的营业额平均值

echo 'a, 1, 10a, 2, 20a, 3, 30b, 1, 5b, 2, 6b, 3, 7' | awk '{data[$1]+=$3}END{for(k in data) print k,data[k]}'a, 60b, 18
echo 'a, 1, 10a, 2, 20a, 3, 30b, 1, 5b, 2, 6b, 3, 7' | awk '{data[$1]+=$3;count[$1]+=1;}END{for(k in data) print k,data[k]/count[k]}'a, 20b, 6
复制代码

三、Linux 三剑客之 sed

1、 sed 基本语法与常用参数

  • 语法结构 sed [addr]X[options]

  • -e 表达式

  • sed -n ‘2p’ 打印第二行

  • sed ‘s#hello#world#’ 修改

  • -i 直接修改源文件

  • -E 扩展表达式

  • –debug 调试

2、 sed pattern 表达式

  • 行数与行数范围 20 30,35

  • 正则匹配 /pattern/

  • 区间匹配 //,//

3、 sed action 表达式

  • p 打印,通畅结合-n 参数:sed -n ‘2p’

  • s 查找替换:s/REGEXP/REPLACEMENT/[FLAGS]

  • d 删除,删除前两行 sed ‘1,2d’

  • a 追加

  • c 改变

  • i 插入内容到匹配行之前

  • e 执行命令

  • 分组匹配与字段提取:sed ‘s#([0-9] )|([a-z] )#\1 \2#’

4、 行数操作

  • 打印特定行 sed -n 2p

  • 删除最后一行 sed $d

5、 s 表达式

  • s 表示替换

  • s 后面的追加字符可以为任意字符

  • g 表示全局匹配

  • & 表示匹配内容

echo a:b:c | sed 's/:/123&/'a123:b:c
echo a:b:c | sed 's/:/&123/'a:123b:c
echo a:b:c | sed 's#:#|#g'a|b|c
复制代码

6、 反向引用

  • 使用()对数据进行分组

  • 使用\1 \2 反向引用分组

echo 0 1 2 3 4 | sed -E 's#([1-3]) ([1-3]) ([1-3])#\3 \2 \1#'0 3 2 1 4
复制代码


发布于: 刚刚阅读数: 3
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Linux 数据处理三剑客学习笔记_Linux_测试人_InfoQ写作社区