day018+四剑客之awk和sed
- awk
- 取行
- 案例01: 取出/etc/passwd第3行
- awk ‘NR>=3’ /etc/passwd
- 案例02: 取出/etc/passwd 第3到10行
- awk ‘NR>=3 && NR<=10’ /etc/passwd
- 案例03: 取出/etc/passwd中包含bash的行
- grep ‘bash’ /etc/passwd
- awk ‘/bash/’ /etc/passwd
- sed -n ‘/bash/p’ /etc/passwd
- 案例04:取出日志中指定时间段内的日志
- 取出时间范围日志
- 检查是否有11号的15:00 16:00的日志
- grep ’11 15:00′ secure-20161219 |wc -l
- grep ’11 16:00′ secure-20161219 |wc -l
- sed -n ‘/15:00:00/ , /16:00:00/p’ secure-20161219 |wc -l
- sed -n ‘/15:00:00/ , /16:00:00/p’ secure-20161219 >secue-
15-16 - sed -n ‘/22.Nov.2015:11:30:00/ , /22.Nov.2015:11:31:00/p’ access.log |wc -l
- sed -n ‘[/22\/Nov\/2015:11:30/ , /\[22\/Nov\/2015:11:31:00/p’ access.log |wc -l
- awk ‘$4>=”[22\/Nov\/2015:11:11:13]”‘ ~/access.log
- 过滤时间段
- awk ‘/04:10:00/ , /04:11:00/’ ~/secure-20161219 |less
- 过滤时间段四点十分到四点十一分的时间
- 检查是否有11号的15:00 16:00的日志
- 取列
- awk -F 可以指定分隔符.
- 案例07: 取出/etc/passwd第1列第3列和最后一列
- awk -F : ‘{print $1,$3,$NF}’ /etc/passwd |column -t
- 案例08: 取出ip a s ens33 中的ip地址
- ip a s ens33 |awk ‘NR==3’ |awk -F ‘[ /]+’ ‘{print $3}’
- ip a s ens33 |awk ‘NR==3’ |awk -F ‘inet |/24’ ‘{print $2}’
- 案例09: 显示/etc/passwd每一行的内容与行号
- less -N
- cat -n
- awk ‘{print NR ,$0}’
- 案例10: 案例08合并成1个awk,使用1个管道
- ip a s ens33 |awk ‘NR==3’ |awk -F ‘[ /]+’ ‘{print $3}’
- ip a s ens33 |awk -F ‘[ /]+’ ‘NR==3{print $3}’
- 案例07: 取出/etc/passwd第1列第3列和最后一列
- awk -F 可以指定分隔符.
- awk计算与统计
- 统计数量
- awk ‘{i=i+1} END{print i} ‘ /etc/services
- wc -l
- 计算
- 案例12:统计seq 10结果的总和
- seq 10 |awk ‘{i=i+$1} END{print i}’
- access.log是访问日志,日志的第10列,是用户访问的资源的大小,对大小求
和,形式以MB或GB形式展示- awk ‘{i=i+$10} END{print i}’
- 按照GB显示 awk ‘{i=i+$10} END{print i/1024^3″GB”}’ access.log
- 案例13:统计free结果中内存空闲率
- free -m |awk ‘NR==2{print $NF/$2*100″%”}’
- 案例12:统计seq 10结果的总和
- 统计数量
- 取出时间范围日志
- 案例01: 取出/etc/passwd第3行
- 取行
- sed
- sed(查找输出)
-
- 案例01:根据行号进行过滤
- sed -n ‘3p’ /etc/passwd
- -n 取消sed命令的默认输出
p输出print
- -n 取消sed命令的默认输出
- sed -n ‘3p’ /etc/passwd
- 案例01:根据行号进行过滤
- 案例02:根据行号范围进行过滤
- sed -n ‘3,9p’ /etc/passwd
- 输出三到九行
- sed -n ‘3,$p’ /etc/passwd
- 到最后一行
- sed -n ‘3,9p’ /etc/passwd
- 案例03: 类似于grep/egrep进行过滤
- sed -n ‘/root/p’ /etc/passwd
- sed -nr ‘/root|oldboy/p’ /etc/passwd
- 使用正则过滤两个需要加-r (-nr)
- 案例04: 取出文件中某个范围的内容
- sed -n ‘/1/ , /5/p’ /num.txt
- sed -n ‘/^5/ , /^15/p’ num.txt
- 精确匹配数字–5
- sed -n ‘/01:00:00/ , /02:00:00/p’ secure-20161219
- sed -n ‘/16 11:00:00/,/16 11:10:00/p’ secure-20161219 |wc -l
- 统计数量
- sed -n ‘/16 11:00:00/,/16 11:10:00/p’ secure-20161219 |grep -i
‘failed password’ |wc -l- 统计失败的次数
-
- sed (查找替换)
- 案例05: 把文件中的oldboy替换为lidao
- 格式:sed ‘s###g’
- sed ‘s#oldboy#lidao#g’ sed.txt
- 全部替换
- sed ‘s#oldboy#lidao#’ sed.txt
- 替换第一个(无g)
- sed ‘s#oldboy#lidao#g’ sed.txt
- sed -i 备份文件
- sed -i.bak ‘s#oldboy#lidao#g’ sed.txt
- 会备份出sed.txt.bak的文件
- sed -i.bak ‘s#oldboy#lidao#g’ sed.txt
- sed 中-n和-i不能一起用
- sed -in ‘s@#Port 22@Port 52113@g’ sshd_config
- 导致文件内容清空
- sed -in ‘s@#Port 22@Port 52113@g’ sshd_config
- 格式:sed ‘s###g’
- 案例06: 复制/etc/passwd到当前目录,把passwd文
件的第1列和最后一列调换位置- 简单例子
- echo 123456 |sed -r ‘s#(..)(..)(..)#\3\2\1#g’
- sed ‘s#(.*)(:x.*:)(.*)#\3\2\1#g’ passwd
- 简单例子
- 替换时间
- sed -r ‘s#([0-9]{2})(…)([0-9]{4}):(.*)#\3-\2-\1 \4#’
- 案例05: 把文件中的oldboy替换为lidao
- sed 删除
- sed ‘3d’ num.txt
- 删除第三行
- sed ‘/^1/d’ num.txt
- 删除以数字1开头的行
- c
- 清空指定行,写入内容
- a
- 在指定行上面增加1行.
- i
- 清空指定行,然后写入内容.
- sed ‘3d’ num.txt
- sed(查找输出)
非常有用,谢谢博主