sed(stream editor) 是非交互式文本流编辑器,它逐行处理文本,依据输入的指令对文本进行转换


基本用法

sed [选项] '脚本' 文件名
# 或者
命令 | sed [选项] '脚本'

Tip

sed 命令的构造是抽象的,这里我们只举一些常用例子

替换

语法 : s/正则表达式/替换内容/标注

  • 标注: 可选参数
    • g 替换所有匹配项目(默认只会替换每行第一个)
    • i 忽略大小写
    • p 打印发生替换的行 (需要与-n选项一起使用)
    • w 将更改写入文件

例如:将系统日志中所有”Error”(忽略大小写)变成”ERROR!!” 并且打印

journalctl | sed -n 's/error/ERROR!!/gip'

删除

使用d命令删除行命令有

  • 删除具体行 sed '5d'(删除第5行) & sed '2,4d'(删除2-4行)
  • 删除包含正则表达式的行 /正则表达式/d

打印

默认情况下 sed 是打印所有行,你需要使用参数 -n 静默输出让他只打印命令的行

使用p命令删除行命令有

  • 打印具体行 sed '5d'(打印第5行) & sed '2,4d'(打印2-4行)
  • 打印包含正则表达式的行 /正则表达式/d

插入/追加/修改

  • 插入i ,追加a, 修改c[行数](操作符)\新文本 or /正则表达式/(操作符)\新文本
  • 插入是在匹配行前一行插入
  • 追加是在匹配行后一行插入
  • 替换是将匹配行替换成新内容

多命令

我们可以使用 ;-e 分隔多命令,其中 ; 需要在单引号里使用 -e 需要在单引号外面使用

删除空行并且用”bar” 替换 “foo”

sed '/^$/d; s/foo/bar/g' filename.txt
# 或者
sed '/^$/d' -e 's/foo/bar/h' filename.txt