← 前一天目录后一天 →

每日科普 · 2026-09-30 周三

考研 408 × 求职面试

知识点 · Linux · 高频

文本处理三剑客:grep、sed 与 awk

1. grep:按行过滤文本,输出包含模式的行。常用 -i 忽略大小写、-v 反向匹配、-n 显示行号、-r 递归目录、-E 使用扩展正则。适合日志检索、进程筛选。 2. sed:流编辑器,按行处理并可替换、删除、插入。s/旧/新/g 做全局替换,-n 与 p 控制只打印匹配行,-i 可原地修改文件。适合批量替换和脚本化编辑。 3. awk:按列分析文本,默认以空格或 Tab 分隔,$1 是第一列,$NF 是最后一列,NR 是行号,NF 是字段数,可写条件、循环和统计,并配合 BEGIN/END。适合报表统计、日志分析。 4. 组合使用:grep 找行,sed 改行,awk 取列算数。例如 grep ERROR app.log | awk '{print $1,$9}' | sort | uniq -c。 注意:grep 默认基础正则,+、?、{} 常需 -E 或转义;sed 不加 -i 不改原文件;awk 字段从 1 开始,$0 表示整行。

每日一题 · Linux

文本处理三剑客:grep、sed 与 awk

日志每行格式为“IP 时间 URL”。要统计访问次数最多的前3个IP,下列命令最合适的是? A. grep -c IP app.log B. awk '{print $1}' app.log | sort | uniq -c | sort -nr | head -3 C. sed -n 's/.*//p' app.log D. grep -n IP app.log

解析

选B。统计按列提取用awk,$1取第一列IP;sort排序后uniq -c计数,再sort -nr按次数降序,head -3取前三。grep适合过滤行,sed适合替换/删除行,均不擅长按列统计。

面试小贴士 · Linux

文本处理三剑客:grep、sed 与 awk

面试常问三剑客区别、正则和组合管道。答:grep过滤行,sed编辑行,awk分析列;结合日志统计举例。易错:grep -E,sed -i备份,awk $1不是shell $1,-F指定分隔符。

代码实现 · C

代码示例

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    if (argc < 3) {
        printf("用法: %s 关键词 文件\n", argv[0]);
        return 1;
    }
    FILE *fp = fopen(argv[2], "r");
    if (!fp) {
        perror("fopen");
        return 1;
    }
    char line[1024];
    while (fgets(line, sizeof(line), fp)) {
        if (strstr(line, argv[1])) { // 匹配关键词
            fputs(line, stdout);     // 输出整行,类似 grep
        }
    }
    fclose(fp);
    return 0;
}
← 前一天目录后一天 →