Linux 文本处理利器: sed 命令详解


sed 命令详解:Linux 文本处理利器

sed(Stream Editor)是一个强大的流式文本处理工具,支持对文本进行查找、替换、删除、插入等操作。它逐行处理文本,默认输出到标准输出(不修改原文件),结合正则表达式可实现复杂操作。


基本语法
sed [选项] '命令' 输入文件

常用选项

  • -n:抑制默认输出(常与 p 命令配合使用)。
  • -i:直接修改原文件(谨慎使用,建议先测试)。
  • -e:执行多个命令,如 sed -e 'cmd1' -e 'cmd2'
  • -r:启用扩展正则表达式(如 +, | 等无需转义)。

核心功能与示例

1. 删除行(d 命令)
  • 删除第 N 行
    sed '3d' file.txt    # 删除第 3 行(输出结果,原文件不变)
    
  • 删除匹配模式的行
    sed '/error/d' file.txt   # 删除包含 "error" 的行
    
  • 删除范围行
    sed '2,5d' file.txt       # 删除第 2 到第 5 行
    sed '/start/,/end/d' file # 删除从 "start" 到 "end" 之间的行
    

2. 查找与替换(s 命令)
  • 基本替换
    sed 's/foo/bar/' file.txt         # 每行第一个 "foo" 替换为 "bar"
    sed 's/foo/bar/g' file.txt        # 全局替换所有 "foo"
    sed 's/foo/bar/2' file.txt        # 替换每行第 2 个 "foo"
    
  • 使用其他分隔符(避免与内容冲突):
    sed 's|/usr/bin|/usr/local/bin|g' file.txt
    
  • 按行范围替换
    sed '3,5s/foo/bar/g' file.txt     # 仅替换 3-5 行的 "foo"
    
  • 匹配后替换
    sed '/error/s/foo/bar/g' file.txt # 在包含 "error" 的行中替换 "foo"
    

3. 打印文本(p 命令)
  • 打印指定行(需配合 -n 选项):
    sed -n '3p' file.txt           # 仅打印第 3 行
    sed -n '/error/p' file.txt     # 打印包含 "error" 的行
    
  • 打印替换后的行
    sed -n 's/foo/bar/p' file.txt  # 只输出被替换的行
    

4. 插入与追加文本
  • 在行前插入(i 命令)
    sed '2i\插入的内容' file.txt    # 在第 2 行前插入一行
    
  • 在行后追加(a 命令)
    sed '/pattern/a\追加的内容' file.txt  # 在匹配行后追加
    

5. 修改行(c 命令)
  • 替换整行内容
    sed '/pattern/c\新的内容' file.txt  # 将匹配行替换为 "新的内容"
    

综合示例

# 删除空行并替换 "hello" 为 "hi",同时备份原文件
sed -i.bak '/^$/d; s/hello/hi/g' file.txt

# 打印 10-20 行中包含 "error" 的行(-n 抑制默认输出)
sed -n '10,20{/error/p}' file.txt

# 使用扩展正则表达式(-r)匹配多个模式
sed -r 's/(foo|bar)/baz/g' file.txt

注意事项

  • 备份原文件:使用 -i.bak 生成备份文件(如 file.txt.bak)。
  • 测试命令:先不加 -i 测试命令,确认无误后再修改原文件。
  • 正则表达式:特殊字符如 .*[]^$ 需转义(或用 -r 启用扩展正则)。

掌握 sed 可大幅提升文本处理效率,建议结合 man sed 查阅完整文档!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值