【Linux “sed“ 命令详解】

本章目录:

    • 1. 命令简介
      • sed 的优势:
    • 2. 命令的基本语法和用法
      • 基本语法:
      • 参数说明:
      • 常见用法场景:
        • 示例1:替换文本
        • 示例2:删除空行
        • 示例3:从命令输出中处理内容
    • 3. 命令的常用选项及参数
      • 常用命令动作:
    • 4. 命令的执行示例
      • 示例1:替换行中的第一个匹配
      • 示例2:全局替换每行中的所有匹配
      • 示例3:显示第 2 到 4 行
      • 示例4:删除包含 "DEBUG" 的行
      • 示例5:文件中就地替换
      • 示例6:在每行末尾添加注释
    • 5. 命令的进阶用法
      • 5.1 多命令执行
      • 5.2 替换特定行内容
      • 5.3 匹配并插入内容
      • 5.4 使用扩展正则替换(支持 +、? 等)
    • 6. 命令的常见问题与解答
      • Q1:`sed` 修改文件失败,内容没有变?
      • Q2:如何使用变量替换?
      • Q3:如何只替换某一列内容?
      • Q4:如何在 macOS 使用 `-i`?
    • 7. 总结与建议
      • 应用场景总结:
      • 最佳实践建议:


1. 命令简介

sedstream editor)是 Linux 中强大的文本处理工具之一,用于以流的方式对文本进行处理。它可以执行替换、删除、插入、新增等操作,常用于批量文本编辑、自动化脚本、日志处理等场景。

sed 的优势:

  • 不需要打开编辑器即可快速修改文件内容;
  • 可与 shell 脚本或管道命令结合,实现复杂文本处理逻辑;
  • 支持正则表达式,功能灵活强大。

2. 命令的基本语法和用法

基本语法:

sed [选项] 'script' [文件...]

参数说明:

  • script:对文本执行的命令脚本,如 s/旧/新/ 表示替换;
  • 文件:要处理的目标文件;
  • [选项]:控制输出行为的参数。

常见用法场景:

示例1:替换文本

将文本 apple 替换为 orange

sed 's/apple/orange/' fruits.txt
示例2:删除空行
sed '/^$/d' data.txt
示例3:从命令输出中处理内容
ps aux | sed -n '1,5p'

显示前 5 行进程信息。


3. 命令的常用选项及参数

选项 说明
-n 静默模式,不自动打印处理结果
-e 多条 sed 命令时使用
-i 直接修改文件内容(原地修改)
-r 启用扩展正则表达式(GNU sed 支持)

常用命令动作:

  • s/pattern/replace/:替换
  • d:删除
  • p:打印
  • a:追加
  • i:插入
  • c:替换整行

4. 命令的执行示例

示例1:替换行中的第一个匹配

sed 's/dog/cat/' animals.txt

将每行中第一个 dog 替换为 cat

示例2:全局替换每行中的所有匹配

sed 's/dog/cat/g' animals.txt

示例3:显示第 2 到 4 行

sed -n '2,4p' file.txt

输出:

Line 2 content
Line 3 content
Line 4 content

说明:-n 关闭默认输出,只打印指定行。

示例4:删除包含 “DEBUG” 的行

sed '/DEBUG/d' logfile.log

解释:所有包含 DEBUG 的日志行都会被删除。

示例5:文件中就地替换

sed -i 's/http:/https:/g' index.html

将所有 http: 替换为 https:,并直接修改文件。

示例6:在每行末尾添加注释

sed 's/$/  # processed/' script.sh

5. 命令的进阶用法

5.1 多命令执行

使用 -e 运行多个操作:

sed -e 's/foo/bar/g' -e '/^#/d' config.conf

说明:先替换所有 foobar,再删除注释行。

5.2 替换特定行内容

只替换第 3 行:

sed '3s/old/new/' file.txt

5.3 匹配并插入内容

在匹配行之后插入文本:

sed '/pattern/a inserted line' file.txt

在之前插入:

sed '/pattern/i inserted line' file.txt

5.4 使用扩展正则替换(支持 +、? 等)

sed -r 's/[0-9]+/NUM/' numbers.txt

说明:替换所有数字为 NUM+ 仅在 -r 模式中生效。


6. 命令的常见问题与解答

Q1:sed 修改文件失败,内容没有变?

原因:未使用 -i 选项
解决

sed -i 's/old/new/g' file.txt

Q2:如何使用变量替换?

解决:使用双引号将命令包裹:

word="apple"
sed "s/$word/orange/g" file.txt

Q3:如何只替换某一列内容?

解决:结合 awk 处理结构化数据更合适;sed 适合按行和模式处理。

Q4:如何在 macOS 使用 -i

解决:macOS 要加空字符串:

sed -i '' 's/foo/bar/g' file.txt

7. 总结与建议

应用场景总结:

  • 批量修改文本文件内容
  • 日志清洗与格式化输出
  • 自动化脚本中的文本替换任务
  • 快速生成配置文件或结构化文本处理

最佳实践建议:

  • 先测试再修改:避免直接使用 -i 修改原始文件
  • 配合正则表达式使用,实现更灵活的匹配和替换
  • 结合管道命令使用(如 grepawksort)可极大增强处理能力
  • 使用 -np 控制输出,提高效率并防止信息冗余

sed 是 Linux 文本处理世界里的“瑞士军刀”,掌握它,你可以优雅地应对各种自动化文本处理任务!

你可能感兴趣的:(Linux命令,linux,运维,shell,bash,c++,c语言,vscode)