Linux文本处理工具(grep、awk、sed)

grep

  • 常用参数
-i忽略大小写
-c统计计数
-v反转匹配
-l列出匹配的文件名称
-L列出不匹配的文件名称
-n输出匹配的行号
-r在指定目录下搜索
--color=auto关键字部分加上颜色

  • 常用命令
grep -i'hello' test.txt在test.txt文件中搜索hello关键字,忽略大小写
grep -ril ‘hello’ /home/web在指定目录下搜索含有关键字hello的文件
ps -ef|grep php查找指定进程
ps -ef|grep -c java查找指定进程个数
tail -f xxx.log | grepxxx过滤后从日志尾部开始输出
tail -f xxx.log | grep --line-buffer xxx | grep --line-buffer yyy多次过滤后从日志尾部开始输出
【Linux文本处理工具(grep、awk、sed)】grep -C 5 foo file显示file文件里匹配foo字串那行以及上下5行
grep -B 5 foo file显示foo及前5行
grep -A 5 foo file显示foo及后5行
grep '# Time:' 201904_slow.log | wc -l统计某个关键字出现的次数
grep -E '# Query_time:' slow.log | awk -F ' ' '{print $3}' | awk '{sum+=$1} END {print sum}'匹配# Query_time:所在的行,然后以空格分隔输出第三列(即query_time:后的数值),最后总和输出。
grep -E 'select' 201902_slow.log | awk -F 'from|where' '{print $2}' | awk '!a[$0]++' > 201902_table.txt从慢查询日志中找出所有表名,写入table.txt文件。
grep -B 2 'wx_user' 201905_slow.log | grep -E '# Query_time:' | awk -F ' ' '{print $3}' | awk '{sum+=$1} END {print sum}'在日志文件中匹配关键字,找出其所在行及其前两行的内容,然后再匹配# Query_time:所在的行,然后进行分列,对数值列进行求和。
grep -B 2 'app_sap_meeting' 201905_slow.log | grep -E '# Query_time:' | awk -F ' ' '{print $3}' | awk '{if ($1>5) print $1}' |sort -nr; 输出执行时间大于5秒的,并反向排序
grep '"time_local":"11/Jul/2019:10:[0-5][0-9]' app-access.log.20190712 | awk -F ',' '{print$3,$8,$4}' > 20190711_am10_request.logaccess日志分析
grep -E '"status":50[2|3|4|5]' app-access.log.20190712 | grep '"time_local":"11/Jul/2019:10:[0-5][0-9]' | awk -F ',' '{print$3,$6,$4,$8}' |sort -nr > 20190711_am10_502.logerror日志分析
grep -B 2 'app_sap_meeting' 201905_slow.log | grep -E '# Query_time:' | awk -F ' ' '{print $3}' | awk '{if ($1>5) print $1}' |sort -nr;
grep -A 2 '29.730785' 201905_slow.log;

awk
  • 语法
awk 'program' input files

awk 在开始处理文件之前执行 BEGIN 块,在处理完输入文件之后执行 END 块。
  • 常用参数
-F指定分割符
  • 常用命令
awk-F":"'{ print $1 }' /etc/passwd
awk'$3>0 {print $1,$2*$3}'test1.txttest2.txt
awk 'BEGIN {count=0; print "user count is ",count} {count++; print $0} END{print "user count is ",count}' test.log
sed
  • 常用参数
a:追加向匹配行后面插入内容
c:更改更改匹配行的内容
i:插入向匹配行前插入内容
d:删除删除匹配的内容
s:替换替换掉匹配的内容
  • 常用命令
sed '3ahello' 1.txt#向第三行后面添加hello,3表示行号
sed '/123/ahello' 1.txt#向内容123后面添加hello

    推荐阅读