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中的字符