SHELL 编程之 sed 工具详解

一、sed 基础语法与核心概念

1.1 sed 工具简介

sed(Stream EDitor) 是一种流式文本编辑工具,基于行处理文件内容,核心工作流程如下:

  1. 读取文件行到模式空间 (pattern space)
  2. 对模式空间内容执行指定操作
  3. 输出处理结果(默认打印到终端)
  4. 清空模式空间,处理下一行

典型应用场景

  • 日志文件分析与过滤
  • 配置文件批量修改
  • 数据清洗与格式转换
  • 脚本自动化处理

1.2 基本命令格式

sed [选项] '<匹配条件> [动作]' [文件名]
核心选项详解
选项 描述 示例
-n 禁止自动打印模式空间内容 sed -n '2p' file
-e 支持多个编辑命令 sed -e '1p' -e '3p' file
-f 从文件读取编辑命令 sed -f script.sed file
-r 启用扩展正则表达式 sed -r 's/[0-9]+/NUM/g' file
-i 直接修改文件(危险操作) sed -i 's/old/new/g' file
-i.bak 备份原文件后修改 sed -i.bak 's/old/new/g' file
匹配条件类型
  1. 行号匹配

    • n:第 n 行
    • n,m:第 n 到 m 行
    • $:最后一行
    • 1~2:奇数行(步进匹配)
  2. 内容匹配

    • /keyword/:包含关键词的行
    • /key1/,/key2/:key1 到 key2 之间的行
    • n,/key/:第 n 行到 key 所在行
常用动作说明
动作 描述 示例
p 打印匹配行 sed '2p' file
d 删除匹配行 sed '3d' file
s 替换内容 sed 's/old/new/g' file
a 行后追加内容 sed '2a\追加内容' file
i 行前插入内容 sed '2i\插入内容' file
c 整行替换 sed '2c\新内容' file
w 保存到文件 sed '2w save.txt' file
r 读取文件内容 sed '2r add.txt' file

 

1.3 基础实践案例

案例 1:行内容打印
# 打印第2行(显示原内容+操作结果)
sed '2p' sed.txt

# 仅打印第2行(抑制默认输出)
sed -n '2p' sed.txt

# 打印第1行和第3行
sed -n '1p;3p' sed.txt

 案例 2:内容匹配打印

# 打印包含"sed4"的行
sed -n '/sed4/p' sed.txt

# 打印奇数行
sed -n '1~2p' sed.txt

# 打印偶数行
sed -n '0~2p' sed.txt

 案例 3:文件多点编辑

# 分步骤执行多个编辑命令
sed -n -e '1p' -e '3p' sed.txt

# 从文件读取编辑命令
echo -e "1p\n3p" > sed_script
sed -n -f sed_script sed.txt

二,文件内容增删操作

2.1内容追加与插入

追加操作(a 动作)
# 在第2行后追加内容
sed -i '2a\追加内容-2' sed.txt

# 在1-3行后批量追加
sed -i '1,3a\t批量追加内容' sed.txt

 插入操作(i 动作)

# 在第1行前插入内容
sed -i '1i\插入内容-1' sed.txt

# 在1-3行前批量插入
sed -i '1,3i\批量插入内容' sed.txt

2.2内容删除与替换

删除操作(d 动作)
# 删除第4行
sed -i '4d' sed.txt

# 删除1-6行
sed -i '1,6d' sed.txt

 整行替换(c 动作)

# 替换第3行为新内容
sed -i '3c\替换内容-1' sed.txt

# 替换1-3行为统一内容
sed -i '1,3c\批量替换内容' sed.txt

2.3 文件加载与保存

加载外部文件(r 动作)
# 在第2行后加载文件内容
sed -i '2r sed.txt' sed.txt

# 在2-4行后批量加载
sed -i '2,4r sed_script' sed.txt

 保存指定内容(w 动作)

# 保存第2行到新文件
sed -i '2w sed_test.txt' sed.txt

# 保存1-4行到新文件
sed -i '1,4w sed_test.txt' sed.txt

你可能感兴趣的:(linux,运维,服务器,笔记)