统计日志中出现最多的IP
grep -i -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}' log.log | sort -n | uniq -c | sort -n -r | head -10
-
grep
- -i 忽略大小写
- -o 输出匹配部分
- -E 正则表达式
-
sort
- -n 数值排序
- -r 倒叙排序
-
uniq
- -c 显示重复次数
-
head
- -n 显示前n行
awk命令
log内容
root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
# awk命令结构
awk 选项 '条件 动作' 文件
# 例如
awk '{print $0}' log
- $0 表示当前行
- $n 表示按照分隔符切割后的第几个(默认是空格,制表符)
- NF 分割了多少个字段 $(NF-n)倒数第几个
- -F 设置分隔符
awk -F ':' '{print $0}' log
- NR 当前行
awk '{print NR ")" $1}' log
1) root
2) daemon
3) bin
4) sys
5) sync
- 函数
- tolower():字符转为小写。
- length():返回字符串长度。
- substr():返回子字符串。
- rand():随机数。
- 条件
$ awk -F ':' '/usr/ {print $1}' demo.txt
root
daemon
bin
sys
$ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt
root
bin
sync
awk -F ':' '{if ($1 > "m") print $1; else print "..."}' demo.txt
root
...
...
sys
sync