sed命令怎么高效使用?

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

什么是 sed?

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

sed命令怎么高效使用?


基础语法结构

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

常用选项

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

核心操作命令

替换文本(最常用)

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

修饰符

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

示例

sed命令怎么高效使用?

# 将 file.txt 中所有 "apple" 替换为 "orange"
sed 's/apple/orange/g' file.txt
# 仅替换每行第2个 "apple"
sed 's/apple/orange/2' file.txt
# 替换并打印修改的行(结合 -n 抑制默认输出)
sed -n 's/apple/orange/p' file.txt

删除行

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

引用匹配内容

& 引用整个匹配,12 引用分组:

sed命令怎么高效使用?

# 给所有数字加括号
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 环境下验证,建议读者先在测试文件练习,修改生产文件前务必备份,避免数据丢失。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/30696.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月19日 09:12
下一篇 2025年6月19日 09:18

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN