当前位置:首页>Linux>Linux三剑客:grep、awk、sed命令超详细使用详解

Linux三剑客:grep、awk、sed命令超详细使用详解

  • 2026-10-11 08:03:10
Linux三剑客:grep、awk、sed命令超详细使用详解

掌握这三个命令,你就能在Linux命令行中高效处理文本数据

📖 目录

  1. 前言

  2. grep – 强大的文本搜索工具

    • 基本语法

    • 常用选项

    • 正则表达式搭配

    • 实战案例

  3. sed – 非交互式流编辑器

    • 基本语法

    • 常用操作(替换、删除、打印等)

    • 地址范围

    • 实战案例

  4. awk – 文本与数据处理语言

    • 基本语法

    • 内置变量与动作

    • 条件与循环

    • 实战案例

  5. 三剑客组合实战

  6. 总结


前言

在Linux系统中,grep、sed、awk被合称为“文本三剑客”。它们各自擅长不同的文本处理任务:

  • grep:擅长搜索与过滤,快速定位匹配的行。

  • sed:擅长编辑与替换,对文本进行增删改查。

  • awk:擅长格式化与分析,按列处理结构化数据。

三者配合使用,几乎可以完成任何复杂的文本处理任务。下面逐一深入讲解。


grep – 强大的文本搜索工具

1. 基本语法

bash

grep [选项] 模式 [文件...]

它会在文件(或标准输入)中查找匹配模式的行,并默认打印出来。

2. 常用选项

选项说明
-i忽略大小写
-v反向匹配,打印不匹配的行
-n显示匹配行的行号
-c只统计匹配的行数
-l只列出包含匹配内容的文件名
-r / -R递归搜索目录
-E使用扩展正则表达式(等同于egrep)
-o只输出匹配到的部分(而不是整行)
-A n显示匹配行及其后n行
-B n显示匹配行及其前n行
-C n显示匹配行及其前后各n行

3. 正则表达式搭配

元字符含义示例
.任意单个字符grep 'a.c' file
*前一个字符重复0次或多次grep 'ab*c'
^行首grep '^root' /etc/passwd
$行尾grep 'bash$' /etc/passwd
[abc]匹配a、b或cgrep '[0-9]' file
[^abc]不包含a、b或c
|或(需-E)grep -E 'error|fail' log
{n,m}重复次数范围grep -E 'a{2,4}'

4. 实战案例

✅ 基础搜索

bash

# 在文件中查找包含"error"的行
grep error app.log

# 忽略大小写
grep -i warning app.log

# 显示行号
grep -n "Exception" app.log

✅ 反向匹配与统计

bash

# 排除空行和注释行
grep -v '^#' config.conf | grep -v '^d' file

✅ 打印与过滤

bash

# 打印第10到20行(相当于head+tail)
sed -n '10,20p' largefile

# 打印匹配正则的行
sed -n '/^ERROR/p' app.log

# 只显示奇数行
sed -n '1~2p' file

✅ 多重编辑与插入

bash

# 多个替换同时执行
sed -e 's/foo/bar/g' -e 's/baz/qux/g' file

# 在匹配行后追加一行
sed '/pattern/a\This is appended line' file

# 在第一行之前插入内容
sed '1i\#!/bin/bash' script.sh

awk – 文本与数据处理语言

awk 是一个完整的编程语言,擅长对结构化文本(如CSV、日志)进行按列处理、计算和格式化输出。其名字来源于三位发明者的姓氏缩写:Aho、Weinberger、Kernighan。

1. 基本语法

bash

awk [选项] '模式 {动作}' [文件...]
  • 模式:决定何时执行动作(可以是正则、条件、行范围等)

  • 动作:用花括号括起来的语句,默认动作是{print 0当前整行$1, $2第1、2列(默认按空白分割)NF当前行的字段数NR当前行号(所有文件累加)FNR当前文件内的行号FS字段分隔符(默认空白)OFS输出字段分隔符(默认空格)RS记录分隔符(默认换行)ORS输出记录分隔符

    3. 常用模式与动作

    awk

    # 选择行
    NR==10          # 第10行
    $1 == "root"    # 第1列等于root
    $3 > 100        # 第3列大于100
    /error/         # 包含error的行
    / # 第2列匹配数字
    
    # 动作语句
    print 2)
    sum+=1, 1, 1, 3 > 50' scores.txt
    
    # 显示包含"404"的行
    awk '/404/' access.log
    
    # 第2列匹配"failed"
    awk '$2 ~ /failed/' log
    
    # 组合条件:第1列是"admin"且第3列>100
    awk '$1=="admin" && 0}' file
    
    # 计算某列的总和与平均值
    awk '{sum+=9]++} END {for(code in count) print code, count[code]}' access.log

    ✅ 格式化输出

    bash

    # 左对齐,宽度10
    awk '{printf "%-10s %-8s\n", $1, $2}'
    
    # 生成HTML表格片段
    awk 'BEGIN{print "<table>"} {print "<tr><td>"$1"</td><td>"$2"</td></tr>"} END{print "</table>"}' data

    ✅ BEGIN与END块

    bash

    # 在处理前打印标题,结束后打印总记录数
    awk 'BEGIN{print "Name,Score"} {print} END{print "Total lines:", NR}' file
    
    # 设置字段分隔符(可用-F选项或BEGIN中设置)
    awk 'BEGIN{FS=","} {print 1, 1, 1, //' | xargs -I {} mv {}.txt {}_new.txt

    5. 复杂数据处理流水线

    bash

    # 从CSV中找出销售额大于1000的销售员,按销售额排序
    cat sales.csv | awk -F',' '2","$3}' | sort -t',' -k2 -nr | sed 's/,/ -> /'

    总结

    命令核心思想最佳适用场景
    grep搜索快速查找匹配行、文件过滤、正则检索
    sed编辑批量替换、删除插入行、非交互修改
    awk格式化列处理、数据统计、报表生成

    学习建议:

    1. 先掌握grep的基本搜索和正则。

    2. 再学sed的替换、删除、打印,理解地址范围。

    3. 最后深入awk,把它当作一门迷你脚本语言来用,掌握数组、循环和格式化。

    记忆口诀:

    • grep用来找,sed改内容,awk处理列,三剑客合璧天下无敌。

    希望本文能帮助你彻底掌握这三个强大的Linux命令。如果你有任何疑问或更好的案例,欢迎在评论区交流讨论!

    📌 本文首发于CSDN,请勿抄袭。欢迎转载,请注明出处。

最新文章

随机文章