查看日志命令(grep sed awk cat tail less sort)

2,798 阅读2分钟
一、grep命令详解
主要用于日志条件过滤
1、关键字查找

grep '关键字' 日志文件
grep 'Exception' catalina.out

2、查看关键字上下文

-A after

-B before
-C A+B

grep 'lalal' -A 3 -B 5   catalina.out
3、过滤不存在某个关键字日志

grep -v 'lalal' catalina.out

二、sed
1、正则过滤

sed -n '/^2019-07-16.*修改用户信息/p'  catalina.out      # 以2019-07-16开头 包含修改用户信息 
gsed -n '/^M.*6.0.*0$/p' tmp                           # M开头 中间包含6.0 以0结尾
sed -n '/^[0-9]\{5\}$/p' number.txt                    # 匹配有连续5个数组的 此处的\是用来转移{}的
gsed -n '/\b123\b/ p' number.txt                       # 过滤只包含123的,1234不包含在内 \b字符边界
gsed -n '260784,260785p' userActivite.txt              # 查看指定行

2、正则替换

sed -i 'a' 's/Beth/aaa/g' tmp
会生成一个tmpa备份文件
所有命令前加g -> gsed、gcat、gls

brew install coreutils
brew install gnu-sed
4、直接修改文件 i
gsed -i '7a TMD' tmp gsed -i 's/\.$/\!/g' regular_express.txt #结尾的.换成! $表示结尾

三、awk
1、格式化文本
php parse.php | awk '{if($1 == "suppliers_id" && $3==1) printf("update d_goods set suppliers_id = %s where goods_sn =\"%s\";\n",$4,$2 )}'
2、打印行号
{ print NR, $0 }
3、格式化打印

{ printf("%-8s $%6.2f\n", $1, $2 * $3) }
4、NF、NR
NF 表示列数
NR 表示行数
5、BEGIN与END
特殊模式 BEGIN 用于匹配第一个输入文件的第一行之前的位置, END 则用于匹配处理过的最后一个文件的最后一行之后的位置。
打印行数

awk 'END { print NR, "employees" }' tmp

四、less
该命令是日志的浏览

五、tail
1、实时查看末尾100行

tail -100f catalina.out

六、sort
sort默认是从小到大 -r逆序 -k指第几列 -n为按照数值大小排序
1、从小到大取最后三行

grep "2014-02-*" gpdata.txt | sort -n -k7 | tail -3
2、从大到小取头头三行

grep "2014-02-*" gpdata.txt | sort -n -k7 -r | head -3

七、wc
  • -c或--bytes或--chars 只显示Bytes数。
  • -l或--lines 只显示行数。
  • -w或--words 只显示字数。
    举个🌰

wc testfile testfile_1 testfile_2  #统计三个文件的信息  
3 92 598 testfile                    #第一个文件行数为3、单词数92、字节数598  
9 18 78 testfile_1                   #第二个文件的行数为9、单词数18、字节数78  
3 6 32 testfile_2                    #第三个文件的行数为3、单词数6、字节数32  
15 116 708 总用量                    #三个文件总共的行数为15、单词数116、字节数708