二、详细解释:文本处理与日志分析命令

1. grep – 文本搜索
  • 用途:在文件或输入流中搜索包含指定模式(正则表达式)的行。

  • 语法

    grep [选项] "搜索模式" 文件名
    
  • 常用选项

    • -i:忽略大小写(如搜索 “Error” 和 “error”)。
    • -v:反向匹配(显示不包含模式的行)。
    • -r:递归搜索目录下的所有文件。
    • -n:显示匹配行的行号。
    • -A 3:显示匹配行及其后3行(After context)。
    • -B 2:显示匹配行及其前2行(Before context)。
  • 示例

    # 在日志中搜索 "error",并显示行号
    grep -n "error" /var/log/syslog
    
    # 递归搜索目录中所有Java文件中的 "TODO" 注释
    grep -r "TODO" /home/project/src/*.java
    
    # 排除注释行(以#开头)
    grep -v "^#" /etc/nginx/nginx.conf
    

2. awk – 文本分析与字段提取
  • 用途:按行处理文本,支持按列提取、计算和格式化输出。

  • 语法

    awk '条件 {动作}' 文件名
    
  • 核心概念

    • $0:整行内容。
    • $1, $2...:第1列、第2列(默认以空格或制表符分隔)。
    • NF:当前行的列数。
    • NR:当前行号。
  • 常用场景

    • 提取字段awk '{print $1}'(输出第一列)。
    • 条件过滤awk '$3 > 500 {print $0}'(第三列大于500的行)。
    • 计算统计:求和、平均值等。
  • 示例

    # 提取访问日志中的IP地址(假设第一列为IP)
    awk '{print $1}' /var/log/nginx/access.log
    
    # 统计HTTP状态码为404的请求数量
    awk '$9 == 404 {count++} END {print count}' /var/log/nginx/access.log
    
    # 计算文件总大小(假设第二列为大小)
    ls -l | awk '{sum += $5} END {print "总大小:" sum "字节"}'
    

3. sed – 流编辑器(文本替换/编辑)
  • 用途:对文本进行流式编辑(如替换、删除、插入行)。

  • 语法

    sed [选项] '编辑命令' 文件名
    
  • 常用操作

    • 替换文本s/旧内容/新内容/gg表示全局替换)。
    • 删除行sed '/pattern/d'
    • 插入行sed '2i 插入内容'(在第2行前插入)。
  • 示例

    # 将文件中的 "old" 替换为 "new",并保存到新文件
    sed 's/old/new/g' input.txt > output.txt
    
    # 删除包含 "debug" 的行(直接修改原文件需加 -i)
    sed -i '/debug/d' app.log
    
    # 在配置文件第5行后插入一行配置
    sed -i '5a server_name example.com;' /etc/nginx/nginx.conf
    

4. cat – 显示文件内容
  • 用途:查看文件内容、合并多个文件。

  • 语法

    cat [选项] 文件名
    
  • 常用场景

    • 查看文件cat file.txt
    • 合并文件cat file1.txt file2.txt > merged.txt
    • 创建临时文件cat > temp.txt(输入内容后按 Ctrl+D 保存)。
  • 示例

    # 查看多个文件内容
    cat /etc/os-release /proc/version
    
    # 将多个日志文件合并
    cat *.log > all_logs.txt
    

5. tail – 查看文件尾部
  • 用途:实时监控日志更新或查看文件末尾内容。

  • 语法

    tail [选项] 文件名
    
  • 常用选项

    • -n 20:显示最后20行(默认10行)。
    • -f:持续跟踪文件变化(实时监控日志)。
    • -F:类似 -f,但会重试(适合跟踪可能被轮转的日志)。
  • 示例

    # 实时监控Nginx访问日志
    tail -f /var/log/nginx/access.log
    
    # 查看日志最后100行中的错误
    tail -n 100 app.log | grep "ERROR"
    

6. head – 查看文件头部
  • 用途:快速预览文件开头内容。

  • 语法

    head [选项] 文件名
    
  • 常用选项

    • -n 5:显示前5行(默认10行)。
  • 示例

    # 查看CSV文件的表头
    head -n 1 data.csv
    
    # 检查脚本的前几行
    head -n 5 backup.sh
    

7. less – 分页查看文件
  • 用途:交互式浏览大文件(支持搜索、翻页)。

  • 语法

    less 文件名
    
  • 操作快捷键

    • 空格:向下翻页。
    • b:向上翻页。
    • /keyword:搜索关键字(按 n 跳转到下一个匹配项)。
    • q:退出。
  • 示例

    # 查看大型日志文件并搜索 "Timeout"
    less /var/log/syslog
    # 输入 `/Timeout` 并按回车
    

8. wc – 统计行数/单词数/字符数
  • 用途:统计文件内容的基本信息。

  • 语法

    wc [选项] 文件名
    
  • 常用选项

    • -l:仅统计行数。
    • -w:统计单词数。
    • -c:统计字节数。
  • 示例

    # 统计日志文件的行数(常用于分析数据量)
    wc -l /var/log/nginx/access.log
    
    # 统计代码文件中的单词数
    wc -w app.py
    

实战案例:分析Nginx访问日志

目标:统计访问量最高的前5个IP地址
awk '{print $1}' /var/log/nginx/access.log | \
sort | \
uniq -c | \
sort -nr | \
head -n 5
步骤解析:
  1. awk '{print $1}':提取日志中的第一列(IP地址)。
  2. sort:对IP地址排序,便于 uniq 统计。
  3. uniq -c:统计每个IP的出现次数。
  4. sort -nr:按次数降序排序。
  5. head -n 5:显示前5个结果。
示例输出:
   1420 203.0.113.45
   1203 198.51.100.22
    891 192.0.2.17
    765 203.0.113.89
    632 198.51.100.5

小贴士:
  1. 管道符 |:将前一个命令的输出作为下一个命令的输入。
  2. 正则表达式:结合 grepsed 时,可灵活匹配复杂模式(如日期、邮箱)。
  3. 性能优化:处理超大文件时,避免多次读取文件(尽量通过管道组合命令)。
  4. 备份文件:使用 sed -i 直接修改文件前,建议先备份原文件。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值