Linux命令行工具中,grep、sed、awk被誉为“三剑客”,它们在文本处理领域各有所长,相互配合可高效完成复杂的文本分析、编辑和转换任务,掌握这三款工具,能极大提升Linux环境下的工作效率。

grep(Global Regular Expression Print)是文本搜索的利器,其核心功能是在输入文件中查找匹配指定模式的行,并将匹配结果输出,基本语法为grep [选项] '模式' [文件...]
,常用选项包括-i
(忽略大小写)、-v
(反向匹配,即输出不包含模式的行)、-n
(显示行号)、-c
(统计匹配行数)等。grep -n 'error' /var/log/syslog
会在系统日志中搜索包含“error”的行并显示行号;grep -v '^#' config.conf
则会过滤掉配置文件中以“#”开头的注释行,grep支持正则表达式,可通过-E
选项扩展为扩展正则表达式(如grep -E 'go+gle'
匹配“gogle”“google”等),这使得搜索灵活性大幅提升。-r
或-R
选项可递归搜索目录,-f
选项能从文件中读取匹配模式,适用于复杂场景。
sed(Stream Editor)是一种流编辑器,专注于对文本进行逐行处理并输出,常用于文本替换、删除、插入等操作,其基本语法为sed [选项] '命令' [文件...]
,核心在于“地址+命令”的组合:地址可以是行号(如1,5
表示1到5行)、正则表达式(如/pattern/
)或两者结合;命令则包括s
(替换)、d
(删除)、a
(追加)、i
(插入)、c
(替换整行)等。sed 's/old/new/g' file.txt
会将文件中所有“old”替换为“new”;sed -i 's/^#//g' config.conf
会直接修改文件,删除每行开头的“#”(-i
选项表示原地修改),sed的强大之处在于支持地址范围和命令组合,如sed '/^$/,/^$/d'
可删除空行段(从第一个空行到下一个空行之间的内容)。sed -n '1,10p'
可只打印1到10行(p
命令表示打印),结合-n
选项可替代head
或tail
的部分功能。
awk是一种强大的文本分析工具,擅长按列处理文本,支持条件判断、循环、数组等编程特性,适合进行结构化数据的统计和格式化输出,其基本语法为awk [选项] '条件{动作}' [文件...]
,默认以空格或制表符为分隔符(-F
可自定义分隔符),将每行分割为字段($0
表示整行,$1
、$2
等表示各字段)。awk '{print $1, $3}' file.txt
会打印每行的第1和第3列;awk -F: '{print $1 "的UID是" $3}' /etc/passwd
以冒号为分隔符,输出用户名和UID,awk的条件判断功能强大,如awk '$3 > 1000 {print $1}' /etc/passwd
可筛选UID大于1000的用户;awk 'NR > 10 && NR <= 20 {print}'
则打印11到20行,awk支持内置变量(如NF
字段数、NR
行号、FILENAME
文件名)和数组,可通过BEGIN
和END
块在处理前后执行初始化或汇总操作,如awk '{sum += $3} END {print "总和:", sum}'
可计算第三列的总和。
三剑客在实际应用中常协同工作:先用grep过滤目标行,再用sed进行格式化修改,最后用awk进行统计或格式化输出,分析Web服务器日志时,可用grep 'POST /api' access.log | awk '{print $1}' | sort | uniq -c | sort -nr
统计每个IP的POST请求数量(grep筛选POST请求,awk提取IP,sort排序,uniq去重计数)。

相关问答FAQs
-
问:grep、sed、awk的主要区别是什么?
答:grep专注于文本搜索,按行输出匹配结果;sed是流编辑器,侧重对文本进行增删改等行级操作;awk是文本分析工具,按列处理文本,支持编程逻辑,适合数据统计和格式化,grep“找”,sed“改”,awk“算”。 -
问:如何用三剑客快速统计文件中每个单词的出现次数?
答:可通过组合命令实现:tr ' ' '\n' < file.txt | grep -v '^$' | sort | uniq -c | sort -nr
,步骤解析:tr
将空格替换为换行符(按单词分行),grep -v '^$'
删除空行,sort
对单词排序,uniq -c
统计重复次数,sort -nr
按次数降序输出,若需忽略大小写,可在grep前添加tr 'A-Z' 'a-z'
转换大小写。
