【前言】
在平时的测试过程中,经常会遇到各种文本处理的问题,于是把遇到的常用的文本处理命令和方法进行了总结和整理。
【常用文本处理命令】
awk
1. awk脚本结构awk ' BEGIN{statements } statements2 END{ statements } '2. 工作方式1) 执行begin中语句块;2) 从文件或stdin中读入一行,然后执行statements2,重复这个过程,直到文件全部被读取完毕;3) 执行end语句块;特殊变量:NR NF $0 $1 $2NR:表示记录数量,在执行过程中对应当前行号;NF:表示字段数量,在执行过程中对应当前行的字段数;$0:这个变量包含执行过程中当前行的文本内容;$1:第一个字段的文本内容;$2:第二个字段的文本内容;例:打印每一行的第二和第三个字段awk '{print $2,$3}' file统计文件的行数awk ' END {printNR}' file
grep
主要用于文本搜索,它能使用正则表达式搜索文本,并把匹配的行打印出来。常用的一些参数如下:-i : 搜索时候忽略大小写-v: 反转匹配,选择没有被匹配到的内容。-w:匹配整词,精确到单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)-x:仅选择与整行完全匹配的匹配项。精确匹配整行内容(包括行首行尾那些看不到的空格内容都要完全匹配)-A num:匹配到搜索到的行以及该行下面的num行-B num:匹配到搜索到的行以及该行上面的num行-C num:匹配到搜索到的行以及上下各num行
重定向输入输出
command > file 将输出重定向到 file。command < file 将输入重定向到 file。command >> file 将输出以追加的方式重定向到 file。command > /dev/null/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃
【实际应用】
1. 处理文本
在测试中,遇到了类似下面的文本处理情形:
在多行类似这样的结构文本中,需要把文字提取出来,然后计算所有文本的time总和,于是便想到了用前面的文本处理过程。 首先提取全部的文本,则需要借助part的上一行,然后把part行去掉,重定向到txt文件,就得到了当前的文本:
grep -B 1 'part' example.txt |grep -v 'part' > result.txt
然后再查找time所在的行,将第二列的数据进行累加,就得到了所求的time的总和。
grep 'time' example.txt | awk '{sum+=$2} END {print sum}'
2. 在shell脚本中使用
#!/bin/bashdate>>log.txtwhile truedoadb shell top -b -n 1|grep demo1 |awk '{print $9}'>> log1.txtadb shell dumpsys meminfo demo2|grep "TOTAL"|awk '{print $2}'|sed -n '2p' >> log2.txtsleep 1donedate>>log.txt
在测试过程中,也可以在脚本中引入,根据不同时刻的日志信息,提取出需要的信息,来辅助记录和分析。
以上就是一些文本处理命令的简单介绍,在平时的工作中遇到文本处理的问题,会比较方便快捷的解决。