Linux中 grep, awk, sed 三个命令在进行日志处理的时候使用的比较多。被称为 Linux 三剑客

grep 过滤文本

  1. 查看 /etc/passwd 文件。

过滤出包含 nologin

  1. grep "nologin" /etc/passwd

image.png

  1. 过滤出所有的数字并高亮

[0-9] 表示所有的数字

  1. grep '[0-9]' /etc/passwd

image.png
[a-z] 表示小写的 26个英文字符

  1. grep '[a-z]' /etc/passwd

image.png
[0-9A-Za-z] 表示数字和英文

  1. grep '[a-zA-Z0-9]' /etc/passwd

image.png

附件

https://www.bilibili.com/video/BV1Xh411U78D/
点击查看【bilibili】

awk 处理文本

查看文件 cat /opt/zbox/logs/apache_access.log
image.png
里面的内容有很多

  1. 我只想查看日志中 ip
    1. awk '{ print $1}' /opt/zbox/logs/apache_access.log
  • '{ print }' 打印输出,固定写法
  • $1 第一列的内容

    sort 排序

    对上面的ip地址继续排序
    1. awk '{ print $1}' /opt/zbox/logs/apache_access.log | sort

    uniq 去除重复

    1. awk '{ print $1}' /opt/zbox/logs/apache_access.log | uniq
    去除重复并排序 ```shell [root@VM-0-14-centos ~]# awk ‘{ print $1}’ /opt/zbox/logs/apache_access.log | sort | uniq 103.123.42.226 107.189.14.98 114.88.77.40 155.4.66.65 167.248.133.44 168.194.176.195 175.10.45.22 199.195.248.54 212.69.18.96 218.82.175.249 218.82.229.162 45.180.194.183 66.240.192.82
  1. 去除重复并排序并统计出现的次数
  2. ```shell
  3. [root@VM-0-14-centos ~]# awk '{ print $1}' /opt/zbox/logs/apache_access.log | sort | uniq -c
  4. 1 103.123.42.226
  5. 1 107.189.14.98
  6. 155 114.88.77.40
  7. 1 155.4.66.65
  8. 2 167.248.133.44
  9. 1 168.194.176.195
  10. 1 175.10.45.22
  11. 1 199.195.248.54
  12. 1 212.69.18.96
  13. 14 218.82.175.249
  14. 1 218.82.229.162
  15. 1 45.180.194.183
  16. 1 66.240.192.82

sed 文件

  1. 编辑文件 /tmp/helloworld.txt ```shell hi, what is your name? my name is hanmeimei, and you? nice to meet you.
  1. 2. 将文件中的内容 `you` 替换为 `he`
  2. ```shell
  3. sed -i 's/you/he/' /tmp/helloworld.txt
  • -i 覆盖文件内容
  • s/you/he/ 搜索you并替换he