正则
基础
^ $ ^$ . * .* [] [^a]
扩展
| () {} ? +
grep/sed/awk
grep
-E 支持正则
-A
-B
-C
-c 统计次数
-V 取反
-o 只打印匹配内容
-w 精确匹配
-n 显示行号
-i 忽略大小写
sed
$ 表示最后一行 sed -n ‘$p’ //输出最后一行
sed -r ‘s###g’
后向引用:
eg: echo 123456 |sed -r ‘s#(.*)#<\1>#g’ //输出<123456> \1表示第一个括号的内容
awk
内置变量:
NR 行号 NF 列数 FS分隔符 OFS 输出分隔符(gawk -v OFS=“@”)
awk数组循环:
for(i in array)print i,array[i]
循环判断:
awk ‘{for(i=1;i<=NF;i++)if(xxx)xxx}’
案例
统计一段时间内系统中进程的内存分配数量
1.开启ftrace中相应事件
echo 1 > /sys/kernel/tracing/events/kmem/mm_page_alloc/enable
echo 1 >/sys/kernel/tracing/tracing_on
2、获取原始trace
echo 0 >/sys/kernel/tracing/tracing_on
cat /sys/kernel/tracing/trace > /data/trace
3、过滤trace中的内存分配事件
grep “mm_page_alloc” /data/trace >/data/trace_grep
4、过滤进程id、order
sed -r ‘s#(.*)\[(.*)order=([0-9]+)(.*)# \1 \3#g’ /data/trace_grep >/data/trace_sed
5、统计
gawk -F" {2,}" ‘{array[$2]+=4*2^$3}END{for(i in array)print i,array[i]}’ tracesed |sort -rnk2 >trace_awk.xls