Skip to content

sed 命令:流编辑器

1. 简介

sed(Stream Editor)是一个强大的文本流编辑器。它可以执行复杂的文本转换操作,如替换、删除、插入和重排文本。sed 通常用于自动编辑一个或多个文件、简化重复的编辑任务、以及编写转换程序。

2. 基本语法

bash
sed [选项] '命令' 文件

3. 常用选项

  • -e script:添加 sed 命令到处理队列
  • -f script-file:从文件中读取 sed 命令
  • -n:抑制自动输出
  • -i:直接修改原文件
  • -r-E:使用扩展正则表达式

4. 基础使用示例

  1. 替换文本:

    bash
    sed 's/old/new/' file.txt
  2. 全局替换(替换所有匹配):

    bash
    sed 's/old/new/g' file.txt
  3. 删除特定行:

    bash
    sed '3d' file.txt  # 删除第3行
  4. 打印特定行:

    bash
    sed -n '2,4p' file.txt  # 打印第2到4行

5. 进阶使用技巧

  1. 使用正则表达式:

    bash
    sed -E 's/[0-9]+/NUMBER/' file.txt
  2. 多个命令组合:

    bash
    sed -e 's/old/new/' -e 's/abc/xyz/' file.txt
  3. 直接修改文件:

bash
   sed -i 's/old/new/g' file.txt
  1. 在特定行前/后插入文本:

    bash
    sed '2i\Inserted Line' file.txt  # 在第2行前插入
    sed '2a\Appended Line' file.txt  # 在第2行后追加

6. 实用示例

  1. 删除空行:

    bash
    sed '/^$/d' file.txt
  2. 在每行开头添加行号:

    bash
    sed = file.txt | sed 'N;s/\n/\t/'
  3. 转换 DOS/Windows 文本文件为 Unix 格式:

    bash
    sed 's/\r$//' file.txt
  4. 从 HTML 中提取纯文本:

    bash
    sed 's/<[^>]*>//g' file.html

7. 注意事项

  • sed 默认不会修改原文件,除非使用 -i 选项。
  • 在使用 -i 选项时要小心,最好先做备份。
  • 复杂的 sed 命令可能难以阅读和维护,考虑使用注释或分解成多个简单命令。

8. 相关命令

  • awk:更强大的文本处理工具
  • tr:用于转换或删除字符
  • cut:用于提取文件的列
  • grep:用于模式匹配的搜索

9. 技巧与建议

  1. 使用 sed 创建备份文件:

    bash
    sed -i.bak 's/old/new/g' file.txt
  2. 使用 & 引用匹配的文本:

    bash
    sed 's/hello/& world/' file.txt
  3. 使用括号和反向引用:

    bash
    sed 's/\(hello\) \(world\)/\2 \1/' file.txt
  4. 在脚本中使用变量:

    bash
    old="hello"
    new="bonjour"
    sed "s/$old/$new/g" file.txt

sed 是一个非常强大的文本处理工具,特别适合进行批量文本编辑和转换。它的语法简洁但功能丰富,常与其他命令如 grepawk 结合使用,可以完成复杂的文本处理任务。掌握 sed 可以大大提高文本处理的效率,尤其是在处理大量文本数据或自动化脚本编写时。