当前位置:首页>Linux>Linux 文本处理三剑客 前世今生

Linux 文本处理三剑客 前世今生

  • 2026-10-11 06:09:27
Linux 文本处理三剑客 前世今生

Linux 文本处理三剑客(grep、sed、awk)和进程管理,是运维人员最核心的技能组合。前者专注于数据的检索、过滤与转换,后者则负责程序的监控、调度与控制。


🗡️ 第一剑客:grep —— 文本搜索的基石

grep 的名字来源于 g/re/p,是 ed 编辑器中的一个命令,意为“globally search a regular expression and print”(全局搜索正则表达式并打印)--。

  • 🔭 前世: 1973年,Ken Thompson 在 Unix 系统上开发了 grep 作为独立工具,其核心是正则表达式--。

  • ✨ 今生: 它是最基础的文本搜索工具,本质是在文件或数据流中,根据模式(Pattern)过滤出匹配的行--。

  • 💡 核心用法:

    • grep 'error' app.log:在日志中查找 error-。

    • grep -E '^[0-9]{3}-[0-9]{4}$' file.txt:使用扩展正则匹配电话号码-。

    • grep -r 'TODO' ./src/:递归搜索目录下的所有文件-。

grep -v 'debug' app.log:过滤掉包含 debug 的行(反向匹配)-1-

一句话总结:grep 用于查找,它不修改内容,只负责从数据中“捞出”你想要的。


🗡️ 第二剑客:sed —— 流编辑器的鼻祖

sed 是 Stream Editor(流编辑器)的缩写-。

  • 🔭 前世: 1973-1974年,Lee E. McMahon 在贝尔实验室开发了 sed--。它的设计理念是非交互式地执行编辑命令-,成为了 grep 的继任者--。

  • ✨ 今生: 它可以在不打开文件的情况下,对文本进行增、删、改、查等操作-。grep 负责“查”,sed 则负责“改”。

  • 💡 核心用法:

    • sed 's/old/new/g' file.txt:全局替换文本--。

    • sed -i 's/old/new/g' file.txt:直接修改文件内容(原地替换)-。

    • sed '/pattern/d' file.txt:删除匹配 pattern 的行-。

    • sed -n '10,20p' file.txt:只打印文件的第10到20行。

一句话总结:sed 是非交互式的文本编辑器,擅长进行批量、自动化的文本替换和修改。


🗡️ 第三剑客:awk —— 数据驱动的编程语言

awk 的名字来源于其三位创造者 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母--。

  • 🔭 前世: 1977年在贝尔实验室诞生--。它借鉴了 C 语言的语法-,专为处理结构化文本(如日志、CSV)而设计。

  • ✨ 今生: awk 远不止是一个命令,它是一门完整的编程语言-。它按行读取,自动将行分割成字段(列),让处理表格化数据变得极其简单-。

  • 💡 核心用法:

    • awk '{print $1, $3}' data.log:打印每行的第1和第3个字段-。

    • awk -F: '{print $1}' /etc/passwd:以 : 为分隔符,打印第一列(用户名)-。

    • awk '/ERROR/ {print $0}' app.log:打印所有包含 "ERROR" 的完整行。

    • ps aux | awk '{print $2}':提取所有进程的 PID-。

    • awk '{sum += $1} END {print sum}' numbers.txt:计算第一列数字的总和-。

一句话总结:awk 是数据提取和报告生成工具,它把文本当成表格来处理,擅长“取列”和“计算”-5。


🤝 三剑合璧:管道中的数据处理流水线

三者可以像积木一样通过管道(|)组合,发挥1+1>2的效果:

  • 需求:找出所有访问日志中状态码是404的请求,并提取出对应的IP地址。

  • 命令:grep ' 404 ' access.log | awk '{print $1}' | sort | uniq -c | sort -nr

    • grep 先过滤出包含 404 的行-。

    • awk 提取出这些行中的第一个字段(通常是IP)-。

    • 后续的 sort、uniq 对IP进行统计和排序。

这就像一条生产线:grep 负责挑选原料,awk 负责切割加工-。


请在微信客户端打开

请在微信客户端打开

请在微信客户端打开

🧠 进程管理:系统的“交警”与“调度员”

在 Unix/Linux 中,进程(Process) 是程序的运行实例-。进程管理就是监控、调度和控制这些运行中的程序-。

1. 核心概念

  • PID (Process ID):每个进程的唯一身份证号-。

  • 父子进程:一个进程可以创建另一个进程,形成树状结构。init (PID=1) 是所有进程的“老祖宗”-。

  • 前台与后台:前台进程会占用终端,后台进程则在后台默默运行。

  • 信号 (Signal):进程间通信的“暗号”,用于通知进程发生的事件-。

2. 核心命令

  • ps (Process Status):查看当前进程快照-。常用 ps aux 或 ps -ef 查看所有进程的详细信息。

  • top / htop:实时动态监控系统进程-,类似Windows的任务管理器。htop 是其增强版,界面更友好。

  • kill:向进程发送信号-。

    • kill PID:发送 SIGTERM (15) 信号,请求进程优雅地终止-。

    • kill -9 PID:发送 SIGKILL (9) 信号,强制杀死进程-。

    • killall / pkill:通过进程名而非PID来终止进程-。

  • 作业控制:

    • &:在命令末尾加 &,放入后台运行。

    • Ctrl+Z:暂停当前前台进程。

    • bg:将暂停的进程放入后台继续运行。

    • fg:将后台进程调回前台-。


💎 总结

如果把 Linux 系统比作一个繁忙的城市:

  • grep 是高效的搜索引擎,能在海量信息中精准定位。

  • sed 是自动化的文本工厂,能批量修改文档。

  • awk 是强大的数据分析师,能从报表中提取关键指标。

  • 进程管理则是城市的交通指挥系统,确保所有任务有序、高效地运行。

掌握这三剑客和进程管理,是深入理解与高效运维 Linux 系统的必经之路。

如有疑问请关注作者微信公众号,我们定期推送技术栈。

最新文章

随机文章