sed(1):强大的文本处理命令
侧边栏壁纸
  • 累计撰写 146 篇文章
  • 累计收到 2 条评论

sed(1):强大的文本处理命令

soulio
2024-09-25 / 0 评论 / 4 阅读 / 正在检测是否收录...

一、命令简介

sed​(stream editor)是一个强大的文本处理工具,它能够执行基本的文本转换,如替换、删除、插入和修改文本行的特定部分。sed​ 命令通常用于对文本文件进行批量编辑,也可以用于处理来自管道的输入。

特点

  • 支持正则
  • 批量处理
  • 非交互式
  • 每行处理

标签: 文本处理, shell 编程

获取帮助:sed --help

视频教程

Shell 其实很简单(33)sed 的基本使用_哔哩哔哩_bilibili

sed ​的用法比较多样(复杂),通过视频演示更容易理解,同时也需要动手练习,最后通过笔记总结。

二、命令参数

sed [选项] 匹配模式 文件

常用选项

  • -e​ 或 --expression​:添加一个编辑命令到脚本。
  • -f​ 或 --file​:从文件中读取编辑脚本。
  • -n​ 或 --quiet​ 或 --silent​:抑制自动打印。
  • -i​ 或 --in-place​:⚠️直接修改文件,而不是输出到标准输出。必须谨慎使用。
  • -r​ 或 --regexp-extended​:使用扩展的正则表达式。
  • --help​:查看帮助文档

匹配模式

  • s/regexp/replacement/​:替换匹配到的字符串。
  • d​:删除匹配到的行。
  • p​:打印匹配到的行。
  • a \text​:在匹配到的行后面添加文本。
  • i \text​:在匹配到的行前面插入文本。
  • c \text​:替换匹配到的行为指定的文本。

三、命令示例

  1. sed '/模式/命令' 文件​ 模式:处理整行

    # 删除:删除井号开头的行
    sed '/^#/d' txt
    
    # 删除不匹配的行:删除不是井号开头的行
    sed '/^#/!d' txt
    
    # 多命令:删除井号开头的行,删除空行
    sed '/^#/d; /^$/d' txt
    
    # 追加:在匹配的行后面插入一行内容
    sed '/^#/a #上一行是注释,这一行也是注释' txt
    
    # 插入:在匹配的行前面插入一行内容
    sed '/^#/i #下一行是注释,这一行也是注释' txt
    
    # 替换行:替换掉匹配行的内容
    sed '/^#/c #这是一条重新编辑后的注释' txt
    
    # 导入文件:匹配行写入指定文件
    sed '/^#/w txt2' txt
    
    # 在每个匹配到的行前插入(一行来写)行号
    # 鸡肋,可能不是你预期的样子:行首插入行号
    sed '/^#/=' txt
    
    # 删除单行
    sed '3d' txt
    # 删除多行(第3到第5行)
    sed '3,5d' txt
    
    # 将text文件的内容插入到txt文件的第二行
    sed '2r text' txt
    
    # 打印匹配行
    sed -n '/^[^#]/p' txt
    

    以上操作不会修改你的源文件,它只会把结果输出在终端上。

  2. s/查找/替换/​ 模式:处理行中的匹配字串

    # 替换每行第一个匹配字符串
    sed 's/hello/world/' txt
    
    # 全局替换
    sed 's/hello/world/g' txt
    
    # 仅显示替换后的行
    sed -n 's/hello/world/gp' txt
    
    # 引用模式 &:匹配的字符串
    sed -n 's/world/&!/gp' txt
    
    # 自定义分隔符
    sed -n 's#hello#Hello#gp' txt
    
    # 基础正则表达式
    sed 's/[0-9]\+/x/g' txt
    # 拓展正则表达式 减少转义
    sed -r 's/[0-9]+/x/g' txt
    

    以上操作不会修改你的源文件,它只会把结果输出在终端上。

  3. ⚠️谨慎使用 -i​ 选项: 因为它真的会修改你的源文件。

    # 替换:hello被替换为world
    sed -i 's/hello/world/g' txt
    

输出示例

image

注意事项:

  • 原地编辑:使用 -i​ 选项进行原地编辑时,建议先备份文件,以防意外修改。
  • 正则表达式sed​ 默认使用基础正则表达式,若需要使用扩展正则表达式,可以添加 -r​ 选项。
  • 文件处理sed​ 是一行一行处理文本的,对于大文件可能效率较低。
  • 语法注意sed​ 的语法和操作符可能会因不同版本而略有差异,需注意兼容性。
  • 熟练掌握 sed​ 命令可以提高文本处理效率,但在操作时应注意备份重要文件,避免意外修改。

sed​ 是一个非常灵活的工具,能够执行复杂的文本处理任务。掌握 sed​ 可以大大提高在命令行环境中处理文本的效率。

本文共 888 个字数,平均阅读时长 ≈ 3分钟
0

海报

正在生成.....

评论 (0)

取消