[size=x-large]shell[/size]
[*] case语法
[*] 查看系统32位还是64位
[size=x-large]grep[/size]
[*] grep命令hang住的问题
[*] 提取正则匹配的字段
[*] 查看log
[size=x-large]sed[/size]
[*] 替换文件中的行
[*] 添加行
[size=x-large]awk[/size]
[*] 基本的awk命令
[*] 分析gc日志,提取时间
[*] case语法
case "$1" in
start)
start;;
stop)
stop;;
*)
usage;;
esac
[*] 查看系统32位还是64位
$uname -m
x86_64
$arch
x86_64
[size=x-large]grep[/size]
[*] grep命令hang住的问题
$ sh --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
# 这行命令会一直卡住,直到按下ctrl+c终止命令执行后才会输出grep的结果
$ grep "Full GC" gc.log | cut -d' ' -f11
# 可以通过cat + 管道的方式解决(需要注意如果文件特别大时,不适用cat命令)
$ cat gc.log | grep "Full GC" | cut -d' ' -f11
[*] 提取正则匹配的字段
# 文件内容
$ cat gc.log
27.427: [GC [PSYoungGen: 575772K->143524K(611072K)] 898332K->529514K(1079168K), 0.4843210 secs] [Times: user=0.87 sys=0.09, real=0.48 secs]
27.911: [Full GC [PSYoungGen: 143524K->0K(611072K)] [PSOldGen: 385990K->415894K(586240K)] 529514K->415894K(1197312K) [PSPermGen: 18180K->18180K(29824K)], 1.5263920 secs] [Times: user=1.50 sys=0.02, real=1.53 secs]
# 提取 real=xx secs 中间的 xx,也就是gc的时间
$ grep -Po "(?<=real\=).* (?=secs)" gc.log
0.48
1.53
[*] 查看log
cat x.log|grep -Eo "[a-zA-Z]*Exception" | sort | uniq -c | sort -nr
[size=x-large]sed[/size]
[*] 替换文件中的行
$ sed -i "s/<groups>.*<\/groups>/<groups>cat<\/groups>/g" pom.xml
[*] 添加行
# /a 表示在正则匹配结果行的下一行插入
sed -i '/\[mysqld\]/a\default-character-set=utf8' /etc/my.cnf
# /i 表示在正则匹配结果行的前一行插入
sed -i '/\[mysqld\]/i\default-character-set=utf8' /etc/my.cnf
[size=x-large]awk[/size]
[*] 基本的awk命令
$ awk 'BEGIN {FS=" "} {print $0} END {}' a.txt
# begin后面的{} 表示在awk命令最开始执行
# FS 表示分隔符
# 中间的{} 表示对每一行的处理
# end后面的{} 表示在最后执行
[*] 分析gc日志,提取时间
# 如果第2列 GC,提取第6列数据相加,最后输出
awk 'BEGIN {} {if ($2=="[GC") t+=$6} END { print t }' gc.log