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 | grep  xxx    过滤后从日志尾部开始输出

tail -f xxx.log | grep --line-buffer xxx | grep --line-buffer yyy    多次过滤后从日志尾部开始输出

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.log      access日志分析

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.log    error日志分析

           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.txt  test2.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

你可能感兴趣的:(计算机语言)