0%

sed介绍

sed 简介

sed - stream editor for filtering and transforming text

  • 过滤和转换文本的流编辑器
  • 文件或管道作为其输入
  • 逐行处理

概念理解

  • pattern space,一般翻译为模式空间
    sed默认逐行读取并将其放入pattern空间(临时buffer),会自动释放

  • hold space,一般翻译为保持空间
    像一个长期存储buffer,可以和pattern空间互动,不能直接操作;默认是1空行

sed 处理流程

默认情况下sed逐行读取内容并将其放入pattern空间(会删除行尾的换行符),然后按顺去执行所有的命令;如果没有给定地址范围(限定)则所有行执行命令,否则只限定的行执行命令.
所有命令执行完毕后,将pattern空间(加回换行符)打印到屏幕(标准输出),同时释放pattern空间

sed 语法

sed [OPTION]... {script-only-if-no-other-script} [input-file]...

'[address1[,address2]][!]command[arguments]'

常用选项

  • -n 安静模式,取消默认打印;一般和命令p配合使用
  • -i 直接编辑原文件;未确认效果或备份文件前慎用
  • -e 多重编辑, -e xxx -e xxx

地址(address)范围

  • no addresses,处理所有的输入行
  • one address,只处理匹配到的行;注意是匹配到的行而非一行
  • two addresses,处理匹配到的区间行
    • addr1 matched will always be accepted, even if addr2 selects an earlier line
    • if addr2 is a reg‐exp, it will not be tested against the line that addr1 matched.

地址支持的几种类型

! 取反操作

  • first~step

  • $

  • /regexp/

  • \cregexpc

  • 0,addr2

  • addr1,+N

  • addr1,~N

地址范围后的常用命令

{ 命令开始
} 命令结束

{ CMD ; CMD ... } 同时执行多条命令

  • i TEXT 匹配到的行前新增TEXT
  • c TEXT 匹配到的行替换为TEXT
  • a TEXT 匹配到的行后新增TEXT信息
  • p 打印当前行(模式空间)
  • l Print the pattern space in an unambiguous form
  • d 删除模式空间
  • = 打印匹配到的行号
  • h/H 把模式空间 拷贝/追加 到保持空间 Copy/append pattern space to hold space
  • g/G 把保持空间 拷贝/追加 到模式空间 Copy/append hold space to pattern space
  • n/N 把下一行内容 读取/追加 到模式空间
  • w filename 把当前模式空间写入文件
  • x 保持空间和模式空间内容互换
  • s/REGEXP/REPLACEMENT/[FLAGS] 用replacement替换regexp匹配到的内容
    • g 全局替换
    • NUMBER 替换第N次匹配到的
    • w FILENAME 结果写入FILENAME
    • p 打印模式空间
  • y/source/dest/ 用dest中的字符替换source中的字符