Linux中sed命令

Linux中sed命令详解

sed(Stream Editor)是Linux中强大的流式文本编辑器,用于对输入流(文件或管道数据)执行文本转换。其核心特点是逐行处理,支持正则表达式,适用于批量编辑、过滤和替换文本。以下分类解析常见用法:


1. 文本替换(核心功能)

语法sed 's/原字符串/新字符串/标志' 文件名

  • 基本替换
    # 将每行首个"apple"替换为"orange"(默认仅替换每行第一个匹配)
    sed 's/apple/orange/' fruits.txt
    

  • 全局替换:添加g标志
    # 替换行内所有"apple"
    sed 's/apple/orange/g' fruits.txt
    

  • 限制行范围
    # 仅在第2~4行替换
    sed '2,4s/apple/orange/g' fruits.txt
    


2. 删除行

语法sed '地址范围d' 文件名

  • 删除特定行
    # 删除第3行
    sed '3d' data.txt
    

  • 按模式删除
    # 删除包含"error"的行
    sed '/error/d' log.txt
    

  • 删除空行
    sed '/^$/d' file.txt  # ^$ 匹配空行
    


3. 插入与追加文本
  • 在行前插入i命令):
    # 在第2行前插入"New Line"
    sed '2i New Line' text.txt
    

  • 在行后追加a命令):
    # 在包含"end"的行后追加"---EOF---"
    sed '/end/a ---EOF---' document.txt
    


4. 行号定位与多命令组合
  • 行号范围操作
    # 仅打印第5~10行(-n抑制默认输出,p打印)
    sed -n '5,10p' longfile.txt
    

  • 多命令执行(用-e或分号分隔):
    # 先替换"cat"为"dog",再删除空行
    sed -e 's/cat/dog/g' -e '/^$/d' pets.txt
    


5. 直接修改文件(谨慎使用)
  • -i选项:原地编辑文件(备份原文件更安全
    # 替换并备份原文件为.bak
    sed -i.bak 's/old/new/g' original.txt
    


6. 高级技巧
  • 引用匹配内容:用&引用匹配的整个字符串
    # 将所有数字用括号包裹:123 → (123)
    sed 's/[0-9]\+/(&)/g' numbers.txt
    

  • 分组替换:用\( \)捕获组,\1引用
    # 交换"John,Doe"为"Doe, John"
    sed 's/\([^,]*\),\(.*\)/\2, \1/' names.txt
    


注意事项

  1. 默认行为sed输出到终端,不修改原文件(除非用-i)。
  2. 正则兼容:支持基本正则(BRE),扩展正则需加-E(如sed -E 's/pat1|pat2/repl/g')。
  3. 特殊字符转义:如替换路径/path/to/dir时,需转义斜杠:s/\/old\/path/\/new\/path/或改用其他分隔符(如|)。

示例综合应用
删除config.txt中注释行(以#开头),并将debug=false改为debug=true

sed -e '/^#/d' -e 's/debug=false/debug=true/g' config.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值