Linux 相关

我帮你把 sed / awk / xargs 这三大 Unix 文本处理神器整理成一张清晰的对照表,附带使用场景、核心用法和示例,非常适合做笔记。


工具 核心功能 输入方式 输出方式 常用场景 简单示例 备注
sed 流式文本编辑器(Stream Editor) stdin / 文件 stdout(可 -i 修改文件) 替换、删除、插入文本 `echo "hello world" sed 's/world/Go/'hello Go`
awk 文本分析与报告 stdin / 文件 stdout 按字段处理、统计、条件筛选 `echo "1 2 3" awk '{print $2}'2`
xargs 将标准输入转换为命令参数 stdin 执行命令 批量执行命令 `echo a b xargs mkdir` → 创建目录 a 和 b

核心对比思路

特点 sed awk xargs
是否修改文件 可(-i) 否(主要处理输出) 否(执行命令)
是否按字段处理
是否执行外部命令 可(system()) 是(将 stdin 作为参数传给命令)
适合 批量文本替换、插入、删除 表格文本处理、统计、字段提取 批量执行命令、构建命令参数列表

使用场景对比

任务 推荐工具
文件中替换字符串 sed
提取列 / 统计数字 awk
批量删除 tag / 批量 mv / 批量 rm xargs
grep 过滤后执行命令 xargs
按列做运算 awk
替换 + 保存原文件 sed -i

示例合集(实战笔记风格)

bash 复制代码
####################################
# 1️⃣ sed 示例集:流式文本编辑器
####################################

# 替换单词(只替换第一个匹配)
echo "hello world" | sed 's/world/Go/'
# 输出: hello Go

# 替换所有匹配
echo "foo foo foo" | sed 's/foo/bar/g'
# 输出: bar bar bar

# 删除包含某个单词的行
echo -e "apple\nbanana\ncherry" | sed '/banana/d'
# 输出:
# apple
# cherry

# 在每行开头加前缀
echo -e "a\nb\nc" | sed 's/^/line-/'
# 输出:
# line-a
# line-b
# line-c

# 修改文件内容(原地修改)
# sed -i 's/foo/bar/g' test.txt
# 注意:macOS 需要写成 sed -i '' 's/foo/bar/g' test.txt


####################################
# 2️⃣ awk 示例集:按字段分析文本
####################################

# 打印第 2 列
echo -e "1 2 3\n4 5 6" | awk '{print $2}'
# 输出:
# 2
# 5

# 条件筛选(打印第二列大于1的第一列)
echo -e "a 1\nb 2\nc 3" | awk '$2>1 {print $1}'
# 输出:
# b
# c

# 统计第二列的和
echo -e "10 20\n30 40" | awk '{sum+=$2} END {print sum}'
# 输出: 60

# 字符串匹配
echo -e "foo\nbar\nfoobar" | awk '/foo/ {print $0}'
# 输出:
# foo
# foobar

# 多字段运算
echo "3 4" | awk '{print $1*$2}'
# 输出: 12


####################################
# 3️⃣ xargs 示例集:批量命令执行
####################################

# 简单批量删除文件
# echo "a.txt b.txt" | xargs rm

# find + xargs 删除所有 .log 文件
# find . -name "*.log" | xargs rm

# 每次执行一个参数
echo "file1 file2 file3" | xargs -n 1 echo
# 输出:
# file1
# file2
# file3

# 占位符 -I
echo "v1.0 v1.1" | xargs -I {} echo git tag -d {}
# 输出:
# git tag -d v1.0
# git tag -d v1.1

# 处理空格/特殊字符
# find . -name "*.txt" -print0 | xargs -0 rm


####################################
# 4️⃣ sed + awk + xargs 组合实战
####################################

# 删除所有以 v1. 开头的 Git tag
git tag | grep 'v1\.' | xargs -I {} git tag -d {}
# 步骤解释:
# 1. git tag -> 列出所有 tag
# 2. grep 'v1\.' -> 筛选 v1 开头的 tag
# 3. xargs -I {} git tag -d {} -> 批量删除

# 批量重命名文件,加前缀 new_
ls *.txt | awk '{print "new_"$0}' | xargs -n 1 echo mv
# 输出示例:
# mv new_file1.txt
# mv new_file2.txt
# 实际执行去掉 echo 即可:
# ls *.txt | awk '{print "new_"$0}' | xargs -n 1 mv

####################################
# 5️⃣ 小结
####################################
# sed -> 按行替换/删除/插入文本
# awk -> 按字段分析/统计/条件筛选
# xargs -> stdin -> 批量命令参数
# 三者组合是 Unix 管道处理神器
相关推荐
聆风吟º1 小时前
CANN开源项目深度实践:基于amct-toolkit实现自动化模型量化与精度保障策略
运维·开源·自动化·cann
Coder个人博客1 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
较劲男子汉4 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
Doro再努力4 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp4 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎4 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力4 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene5 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
不像程序员的程序媛5 小时前
Nginx日志切分
服务器·前端·nginx
忧郁的橙子.5 小时前
02-本地部署Ollama、Python
linux·运维·服务器