每日科普 · 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;
}