linux中的 sed` 与 `seq`

文本处理双剑客:sed 与 seq 完全指南

在 Linux 命令行世界里,有两个看似不起眼却极其强大的小工具:sed 和 seq。一个擅长对文本动刀 ,一个擅长生成数字序列。它们单独使用已经很有用,配合 Shell 循环一起上阵时,更是能解决大量批量处理问题。

本文将从基础到实战,系统梳理这两个命令的用法,并结合真实场景帮你彻底掌握它们。

摘要 :本文系统讲解 Linux 下两个高频文本处理工具------sed 与 seq。sed 是流编辑器,擅长按行号、正则地址对文本进行打印、删除、替换与插入;seq 是数字序列生成器,支持指定首数、步长与尾数,并可等宽补零。文章从基本语法、核心操作命令、地址与范围讲起,结合删除历史记录、批量重命名、批量替换 IP、生成测试数据等实战案例,展示二者配合 Shell 循环解决批量重复任务的方法,并给出 macOS 兼容、正则模式、-i 风险等注意事项。


一、sed:流编辑器之王

1. 什么是 sed?

sed(Stream Editor,流编辑器)是一个非交互式的文本编辑工具。它逐行读取输入(文件或管道),在内存的"模式空间"中对每一行进行处理,然后将结果输出。

核心特点:

  • 不交互:所有编辑指令通过命令行参数或脚本传入
  • 逐行处理:默认每次只读一行到内存,效率极高
  • 默认不修改原文件 :输出到 stdout,除非显式指定 -i

2. 基本语法

bash 复制代码
sed [选项] '地址/范围 操作' 文件

最常见的选项:

选项 作用
-i 就地编辑(直接修改文件)
-n 静默模式,只输出被显式打印的行
-e 指定多个编辑命令
-r / -E 使用扩展正则表达式

3. 核心操作命令

命令 含义 示例
p 打印 sed -n '5p' file(打印第5行)
d 删除 sed '10d' file(删除第10行)
s/旧/新/ 替换 sed 's/foo/bar/' file(每行第一个 foo 换成 bar)
s/旧/新/g 全局替换 sed 's/foo/bar/g' file(一行内全部替换)
a\文本 追加 sed '3a\hello' file(第3行后追加 hello)
i\文本 插入 sed '3i\hello' file(第3行前插入 hello)
c\文本 替换整行 sed '3c\new line' file(把第3行换成 new line)

4. 地址与范围

sed 最强大的地方在于精确定位:

bash 复制代码
sed '5d' file              # 第5行
sed '2,6d' file            # 第2到6行
sed '/pattern/d' file      # 包含 pattern 的行
sed '/start/,/end/d' file  # 从匹配 start 到匹配 end 之间的行
sed '$d' file              # 最后一行($ 代表末尾)
sed '1~2d' file            # 从第1行开始,每隔2行删一次(删奇数行)

5. 实战示例

场景 A:删除文件最后一行(回顾你的 history 清理)

bash 复制代码
sed -i '$d' ~/.bash_history

$ → 最后一行,d → 删除,-i → 直接写回文件。

场景 B:只删除包含特定关键词的行

bash 复制代码
sed -i '/history -w/d' ~/.bash_history

比 $d 更安全,精准匹配内容而不是位置。

场景 C:全局替换敏感词

bash 复制代码
sed -i 's/my_secret_password/***REDACTED***/g' config.txt

场景 D:提取日志中某个时间段的内容

bash 复制代码
sed -n '/2024-01-15 10:00/,/2024-01-15 11:00/p' app.log

6. 注意事项

  • macOS vs Linux :macOS 的 sed -i 必须带备份后缀参数,如 sed -i '' 'cmd' file
  • 正则差异 :默认是基础正则(BRE),用 -r/-E 开启扩展正则(ERE)
  • -i 很危险 :没有备份直接改文件,建议先不加 -i 预览结果,确认无误再加

二、seq:数字序列生成器

1. 什么是 seq?

seq(sequence)是一个极其简单的工具------它的唯一功能就是生成一串数字,然后打印出来。但它和 Shell 循环配合时,威力巨大。

2. 三种语法格式

bash 复制代码
seq [选项]... 尾数              # 从 1 开始,步长为 1
seq [选项]... 首数 尾数          # 从首数开始,步长为 1
seq [选项]... 首数 步长 尾数     # 从首数开始,按指定步长递增/递减

3. 常用示例

bash 复制代码
seq 5                  # 1 2 3 4 5(每行一个)
seq 3 7                # 3 4 5 6 7
seq 1 2 10             # 1 3 5 7 9
seq 10 -1 6            # 10 9 8 7 6(倒序)
seq -s ',' 1 5         # 1,2,3,4,5(逗号分隔)
seq -w 8 11            # 08 09 10 11(等宽,补零)

4. seq 与 Bash 大括号展开

很多人会问:{1..10} 不也能生成序列吗?为什么要 seq?

特性 seq {1..10}
是否外部命令 是(/usr/bin/seq) 否(Shell 内置)
支持变量 ✅ seq 1 $N ❌ {1..$N} 不行
支持步长 ✅ seq 1 2 10 ✅ {1..10..2}(Bash 4+)
支持倒序 ✅ seq 10 -1 1 ✅ {10..1}
支持等宽补零 ✅ -w ❌

结论 :如果范围写死了,用 {1..10} 更快更简洁;如果范围里有变量 ,必须用 seq。

5. 在循环中的核心作用

seq 最常见的用法就是配合 for 循环控制执行次数:

bash 复制代码
# 执行 10 次
for i in $(seq 1 10); do
    echo "第 $i 次操作"
done

seq 负责"生成数字列表",for 负责"逐个取值并循环",各司其职。


三、双剑合璧:实战案例

案例 1:无痕批量删除 Bash 历史记录

这是你之前遇到的真实场景,完美展示了 seq + sed 的配合:

bash 复制代码
# seq 生成行号序列,for 循环逐个删除内存中的记录
for i in $(seq 1 21); do
    history -d 100
done

# sed 直接修改磁盘文件,彻底清除痕迹
sed -i '100,120d' ~/.bash_history

# 刷新内存
history -c && history -r

案例 2:批量重命名文件

bash 复制代码
# 把 file1.txt ~ file20.txt 重命名为 doc1.txt ~ doc20.txt
for i in $(seq 1 20); do
    mv "file${i}.txt" "doc${i}.txt"
done

案例 3:批量替换多个配置文件中的 IP

bash 复制代码
# 假设有 10 台服务器的配置需要改
for i in $(seq 1 10); do
    sed -i "s/192.168.1.${i}/10.0.0.${i}/g" "/etc/server${i}.conf"
done

案例 4:生成测试数据

bash 复制代码
# 生成 100 行测试日志
for i in $(seq 1 100); do
    echo "2024-01-$(seq -w $i $i | sed 's/^0//') INFO test log line $i"
done > test.log

四、总结

sed seq
本质 流编辑器,对文本逐行加工 数字序列生成器
核心能力 查找、删除、替换、插入文本 生成有序数字列表
典型搭档 管道、正则、重定向 for 循环
学习重点 地址定位 + 替换语法 三种参数形式 + 步长
常见坑 -i 直接改文件无后悔药 大括号展开不支持变量

一句话概括:sed 负责"改",seq 负责"数",两者配合就能批量搞定大量重复性运维和文本处理任务。


相关推荐
七牛云行业应用3 小时前
DeepSeek Harness(dsh)安装完整指南:Windows、macOS、Linux 三平台 + 桌面端与 Web 端全覆盖
linux·windows·macos·ai·ai编程
乌恩大侠4 小时前
Supermicro 发布六款 NVIDIA ARC 服务器:从 1U 边缘基站到 4U 八卡 AI-RAN 平台,全面对比
运维·服务器·人工智能
十年磨一剑~4 小时前
APT 仓库包查看方法文档
linux·ubuntu
DYWorker0014 小时前
第 1-1 课:启动编排:内核如何把自己装配起来
linux
谢白羽4 小时前
从传统运维到 AI Infra: K8s 上调度 100 张 GPU踩坑笔记
运维·人工智能·缓存·kubernetes·vllm·sglang·vllm-omni
ai_coder_ai5 小时前
使用Web IDE边写自动化脚本
运维·前端·自动化
wacsii5 小时前
【Linux基础开发工具(五)】Git版本控制器从入门到实战:核心操作三板斧与新手避坑指南
linux·运维·服务器
水饺编程5 小时前
第2章:Linux 基础,解压缩【.tar.gz】压缩包
linux·c语言·汇编
zhongben123_5 小时前
从零开发一个打车APP:技术选型、系统架构与成本评估指南
大数据·运维·ios·系统架构·uni-app·web app