前言
sed编辑器被称作流编辑器( stream editor ),和普通的交互式文本编辑器恰好相反。在交互式文本编辑器中,比如 vim ,你需要用键盘命令来交互式地插入、删除或替换数据中的文本。流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
sed处理时,把当前处理的行存储在临时缓冲区中,称为”模式空间”( pattern space),接着sed命令处理缓冲区中的内容,处理完成之后,把缓冲区的内容送往屏幕显示。接着处理下一行,这样不断重复,直到文件末尾。文件内容没有改变,除非使用了写入的命令,将内容更新。
1、sed命令格式
sed [选项] 动作 文件
动作的格式为:地址定界+编辑命令,即 [n1[,n2]] cmd 的形式
说明:
(1)n1和n2表示地址定界。 sed通过设置地址用于决定对哪些行进行编辑,如果没有指定地址,sed将处理输入文件的所有行。sed地址的形式可以是数字、正则表达式或二者的结合,如下所示:
① 全文匹配:不需要给定地址。
②单地址匹配:写一个数字即可,例如:’8’表示匹配第8行。
③多地址匹配:给定一个范围,例如:’1,9’表示匹配第1行到第9行。
④模式匹配:例如:’/正则表达式/’表示正则表达式匹配到的行。再如,’1,/正则表达式/’则表示从第一行到正则表达式匹配到的行。
(2)cmd 为编辑命令。 常见的编辑命令有常见的命令有—a:新增;c:取代;d:删除;i:插入;p:打印;s:取代。 本文主要给大家讲一下“d删除”的用法。
2、删除的场景
(1)删除匹配到error的行
sed -i '/error/d' systeml. log
(2)删除第一行
sed -i '1d' system.log
(3)从第三行开始,每隔一行删除
sed -i '3~2d' system.log
(4)删除从第4行到第8行
sed -i '4, 8d ' system.log
(5)删除最后一行
sed -i '$d' system.log
(6)删除所有空行
sed '/^$/d' system.log
(7)从匹配行到末尾行
sed -i '/Hello World/,$d' system.log
(8)删除匹配行和之后两行
sed -i '/error/,+2d' system.log
备注:本文源自《趣谈 shell 》,用非线性思维学习shell,让天下没有难学的shell。