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