Linux四剑客


Linux四剑客:find、grep、sed、awk 从入门到实战

一、Find:文件搜索神器

核心功能:在指定目录下搜索符合条件的文件/目录,支持按名称、类型、大小、时间、权限等条件筛选。

基础用法(80%场景够用)

1.按文件名搜索(支持通配符)

find 搜索路径 -name "文件名模式"  # 区分大小写
find /home/user -name "*.txt"     # 搜索所有 .txt 文件
find . -name "file?.txt"          # 匹配 file1.txt、file2.txt 等(?代表单个字符)

进阶:不区分大小写用 -iname,例如 find . -iname "*.JPG"

2.按文件类型搜索

find 路径 -type 类型   # f=普通文件,d=目录,l=符号链接
find /var/log -type f  # 搜索日志目录下的所有普通文件
find /usr/bin -type l  # 搜索二进制目录下的所有软链接

3.按文件大小搜索

find 路径 -size 大小   # +大于,-小于,单位:k/M/G(注意大写)
find /data -size +1G   # 搜索大于1GB的文件
find ~ -size -10k     # 搜索小于10KB的文件(小文件清理常用)

4.按修改时间搜索

find 路径 -mtime 天数  # -n表示近n天,+n表示n天前,n表示正好n天
find /var/log -mtime -7  # 搜索7天内修改过的日志文件(运维常用)
find . -mtime +30       # 搜索30天未修改的文件(清理旧文件)

进阶操作:对搜索结果执行命令

5.删除文件(谨慎!)

find /tmp -name "*.bak" -delete  # 直接删除 .bak 文件(无需-exec)
# 安全做法:先预览再删除
find /tmp -name "*.bak" -print   # 打印所有匹配文件
find /tmp -name "*.bak" -exec rm {} \;  # 逐个删除({}代表文件名,\;是命令结束符)

6.限定搜索深度

find /home -maxdepth 2 -name "*.conf"  # 仅在当前目录和子目录(1级深度)搜索配置文件

避坑指南

  • 搜索路径用 . 代表当前目录,用 / 代表整个系统(小心权限问题)。
  • -exec 后用 {} 引用文件名,结尾必须加 \;++ 表示批量执行,效率更高)。

二、Grep:文本搜索利器

核心功能:在文件或文本流中搜索匹配模式的行,支持正则表达式,常与管道结合使用。

基础用法(快速定位关键词)

1.搜索包含关键词的行

grep "关键词" 文件         # 区分大小写
grep -i "keyword" file.txt # 不区分大小写(i=ignore case)

2.递归搜索目录下所有文件

grep -r "error" /var/log  # 在日志目录递归搜索包含"error"的行(排查故障常用)

3.反向匹配(排除关键词)

grep -v "无效行" file.txt  # 显示不包含"无效行"的所有行(过滤干扰信息)

4.显示行号和完整单词匹配

grep -n "user" passwd      # 显示匹配行的行号(n=number)
grep -w "root" passwd       # 仅匹配完整单词(w=word,避免匹配"rootx"等)

进阶:正则表达式与高级选项

5.使用正则表达式

grep "^[0-9]" log.txt      # 匹配以数字开头的行(^=行首)
grep "[0-9]$" log.txt      # 匹配以数字结尾的行($=行尾)
grep "a.*b" log.txt        # 匹配包含"a任意字符b"的行(.*=任意字符任意次)

6.统计匹配行数/文件名

grep -c "success" log.txt  # 统计包含"success"的行数(c=count)
grep -l "error" /var/log/* # 仅列出包含"error"的文件名(l=list files)

实战场景

  • 排查日志grep -r "ERROR" /var/log/
  • 过滤配置文件grep -v "^#" config.ini(排除注释行)

三、Sed:文本编辑魔术师

核心功能:流式处理文本(不修改原文件,除非用 -i),支持替换、删除、插入行等操作。

基础操作:替换文本

1.单行替换(临时输出)

sed 's/旧内容/新内容/' 文件    # s=substitute,默认只替换每行第一个匹配项
sed 's/old/new/g' file.txt     # g=global,替换每行所有匹配项(常用!)

2.直接修改文件(危险!建议备份)

sed -i 's/old/new/g' file.txt  # i=in-place,直接修改文件(重要!操作前确认路径)
sed -i.bak 's/old/new/g' file  # 备份原文件为 file.bak,再修改

行操作:删除、插入、追加

3.删除指定行

sed '3d' file.txt              # 删除第3行(d=delete)
sed '/error/d' file.log        # 删除所有包含"error"的行

4.在匹配行前后插入内容

sed '/开头行/i 插入内容' file   # i=insert,在匹配行之前插入(i=before)
sed '/结尾行/a 追加内容' file   # a=append,在匹配行之后追加(a=after)

进阶:处理空白行与多命令

5.删除空白行/首尾空格

sed '/^$/d' file.txt           # 删除所有空白行(^$表示空行)
sed 's/^[ \t]*//;s/[ \t]*$//' file  # 去除每行首尾空格(分号分隔多个命令)

6.执行多个编辑命令

sed -e 's/old/new/g' -e 's/bad/good/g' file  # -e支持多个命令(链式操作)

避坑指南

  • 正则中的特殊字符(如 $/)需用 \ 转义,例如 sed 's/$/\\n/' file
  • 使用 -i 前务必确认文件路径,建议先通过无 -i 命令预览结果。

四、Awk:文本处理瑞士军刀

核心功能:按行处理结构化数据(如日志、CSV),支持数据提取、统计、计算等复杂操作。

基础:按列处理数据

1.打印指定列(默认分隔符为空格/制表符)

awk '{print $1}' file.txt       # 打印第1列($0=整行,$1=第1列,$NF=最后一列)
awk -F',' '{print $2}' data.csv # -F指定分隔符为逗号,打印CSV文件第2列

2.过滤与条件判断

awk '$3 > 100' sales.csv        # 打印第3列数值大于100的行(数值比较)
awk '/error/{print $0}' log.txt # 打印包含"error"的整行(模式匹配)

进阶:统计与变量

3.计算总和/平均值

awk '{sum += $1} END {print sum}' numbers.txt  # 累加第1列,END表示处理完所有行后执行
awk '{avg += $1} END {print avg/NR}' numbers.txt  # NR=行数,计算平均值

4.自定义输出格式

awk -F':' '{printf "用户:%s,UID:%s\n", $1, $3}' /etc/passwd  # 格式化输出(类似C语言printf)

实战案例

  • 分析日志:统计访问量最高的IP
awk '{count[$1]++} END {for (ip in count) print ip, count[ip]}' access.log | sort -nrk2
  • 处理配置文件:提取端口号
awk -F'[:=]' '/port/ {print $3}' config.conf  # 按冒号或等号分割,取第3列

核心概念

  • 内置变量NR(当前行号)、NF(列数)、FS(字段分隔符,默认空格)。
  • 执行流程:逐行读取文件,对每行应用 pattern { action },无pattern则处理所有行。

五、四剑客对比与场景选择

工具 核心功能 典型场景
find 搜索文件/目录 查找日志文件、清理旧文件
grep 搜索文本中的模式 日志排查、配置文件过滤
sed 文本替换、行操作 批量修改配置、清洗数据
awk 结构化数据处理 统计分析、报表生成

六、学习建议

  1. 从案例入手:每个工具先掌握5个基础案例(如find找文件、grep搜关键词、sed替换、awk取列)。
  2. 多用管道:结合四剑客与其他命令(如 find ... | grepsed ... | awk),提升效率。
  3. 善用帮助:通过 man 工具 查看官方文档,或用 工具 --help 快速查看参数。
  4. 实战练习:处理真实场景(如清理日志、分析CSV数据),遇到问题用搜索引擎找具体案例。

通过以上步骤,初学者可快速掌握四剑客的核心用法,应对80%的日常文本处理需求。进阶功能可在实战中逐步学习,重点关注工具的组合使用!