SED
语言结构
- /addrpattern1/[,/addrpattern2/][!]command
- /addrpattern1/[,/addrpattern2/][!]{command1; command2; …}
- /addrpattern1/[,/addrpattern2/][!]{command1; command2; …};/addrpattern1/[,/addrpattern2/][!]{command1; command2; …};
常用命令
- s 对匹配行进行指定模式替换
- s/pattern/replace/[g]
- 如果 这里的模式和地址模式相同,则可以简写成 s//replace/[g]
- d 删除匹配行
- /addrpattern/d
- p 输出匹配行
可以配合s命令一起,也可以单独使用
- s/pattern/replace/p
- /pattern/p
- = 对匹配行之前插入行数信息
- /addrpattern/=
- i 在匹配行之前插入行
- /addrpattern/i\text
- a 在匹配行之后插入行
- /addrpattern/a\text
- r 将指定文件读到模式空间
- /addrpattern/r myfile
- /addrpattern/{r myfile
command} - /addrpattern/{r myfile
N}
执行N时,如果有下一行,会立即输出 r 读入的内容,如果没有下一行,则先输出模式空间内容,再输出 r 读入的内容
原理
将待处理文本的第一行内容拷贝到模式空间,匹配第一个模式,若匹配进行相应操作,若不匹配则匹配模式命令序列中下一个模式并进行处理,直到所有模式匹配都处理完,然后取文本下一行内容覆盖模式空间当前内容,如此反复,直到处理完所有文本所有行。
常用示例
- 去除空白行
s/^[[:space:]]*$//
- 打印制定行
1,5p
,1p
,/pattern/p
,/pattern1/,/pattern2/p
, 加 -n 选项可以禁止模式空间内容的自动输出 - 输出第一个匹配
/pattern/{p;q}
- 输出第一行到第一个匹配
0,/pattern/p