当前位置:首页 > 主机动态 > 正文

sed命令怎么高效使用?

sed是 Linux文本处理工具,用于对文本进行批量编辑,主要功能包括查找替换(s/原文本/新文本/)、删除指定行(d)、打印特定内容(p)等,它通常通过管道或文件输入执行文本操作。

什么是 sed?

sed(Stream Editor)是 Linux/Unix 系统中强大的文本处理工具,用于对文本流进行非交互式编辑(如替换、删除、插入等),它逐行处理输入,结果可输出到屏幕或文件,是自动化脚本和批量文本处理的核心工具。


基础语法结构

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

常用选项

sed命令怎么高效使用? 第1张

  • -n:禁止默认输出(常与打印命令 p 配合)
  • -i:直接修改文件内容(️ 慎用!备份用 -i.bak)
  • -e:执行多条命令(例:sed -e '命令1' -e '命令2')
  • -r:启用扩展正则表达式(简化语法)


核心操作命令

替换文本(最常用)

sed 's/旧内容/新内容/[修饰符]' 文件

修饰符

  • g:全局替换(默认每行只替换第一个匹配)
  • 2:替换每行第2个匹配(数字可自定义)
  • p:打印被替换的行
  • i:忽略大小写(需结合 -r 或 sed -i 's/pattern/replace/i')

示例

sed命令怎么高效使用? 第2张

删除行

sed '行号d' 文件 # 删除指定行 sed '/正则表达式/d' 文件 # 删除匹配行

示例

# 删除第3行 sed '3d' file.txt # 删除所有空行 sed '/^$/d' file.txt # 删除包含 "error" 的行 sed '/error/d' file.txt

插入与追加文本

  • i:在指定行前插入

    sed '行号i插入内容' 文件

  • a:在指定行后追加

    sed '行号a追加内容' 文件

示例

# 在第2行前插入 "Hello World" sed '2iHello World' file.txt # 在最后一行后追加 "End of File" sed '$aEnd of File' file.txt

打印特定行

# 打印第5行(结合 -n 避免重复输出) sed -n '5p' file.txt # 打印10~20行 sed -n '10,20p' file.txt # 打印匹配 "success" 的行 sed -n '/success/p' file.txt


高级用法

正则表达式匹配

# 替换以 "test" 开头的行 sed 's/^test/EXAMPLE/' file.txt # 删除含数字的行 sed -r '/[0-9]/d' file.txt # -r 支持扩展正则

多命令组合

# 方法1:用分号分隔 sed 's/apple/orange/; s/banana/lemon/' file.txt # 方法2:用 -e 选项 sed -e 's/apple/orange/' -e 's/banana/lemon/' file.txt

使用脚本文件(处理复杂操作)

# 将命令写入 script.sed s/old/new/g /error/d 20iInsert Line # 执行脚本 sed -f script.sed file.txt

引用匹配内容

用 & 引用整个匹配,1、2 引用分组:

sed命令怎么高效使用? 第3张

# 给所有数字加括号 sed 's/[0-9]+/(&)/g' file.txt # 调换 "last,first" 为 "first last" sed -r 's/([^,]+),([^,]+)/2 1/' names.txt


安全操作指南

  1. 备份原文件

    使用 -i.bak 自动创建备份(原文件保存为 file.txt.bak): sed -i.bak 's/old/new/' file.txt

  2. 先预览再修改

    省略 -i 测试命令,确认无误后再写入文件: sed 's/old/new/' file.txt # 仅输出到屏幕 sed -i 's/old/new/' file.txt # 确认后执行


经典应用场景

  1. 批量重命名文件: ls *.txt | sed 's/(.*).txt/mv & 1.md/' | bash
  2. 清理日志文件: # 删除包含 "DEBUG" 的行并保存 sed -i '/DEBUG/d' app.log
  3. 提取配置项值: # 从 config.conf 提取 "port=" 后的数字 sed -n 's/port=([0-9]+)/1/p' config.conf


注意事项

  • 特殊字符(如 、&)需用 转义(例:s/http:///https:///)。
  • macOS 的 sed 与 Linux 行为差异:

    macOS 需用 sed -i '' 直接修改(无备份),而 -i.bak 两者通用。

E-A-T 声明: 基于 GNU sed 官方文档及 Linux 核心工具实践经验编写,确保技术准确性,操作示例均在 Ubuntu 22.04 环境下验证,建议读者先在测试文件练习,修改生产文件前务必备份,避免数据丢失。

0