前言
sed编辑器是一种流编辑器,流编辑器会在编辑器处理之前基于预先提供的一组规则来编辑数据流.
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。
sed编辑器是文本处理工具,可以读取文本内容,根据指定的条件进行处理,如删除、替换、添加等可在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于Shell脚本,以完成自动化处理任务,sed依赖于正则表达式。
sed工作过程
sed主要包括读取,执行,显示三个过程。
读取:sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)
执行:默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。
默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非使用"sed -i"修改源文件、或使用重定向输出到新的文件中。
sed命令格式
sed -e '操作' 文件1 文件2
sed -n -e '操作' 文件1 文件2
sed -f 脚本文件 文件1 文件2
sed -i -e '操作' 文件1 文件2
常用选项
| 选项 | 作用 |
|---|---|
| -e(--expression=) | 表示用指定命令来处理输入的文本文件,只有一个操作命令时可省略,一般在执行多个操作命令使用 |
| -f(--file=) | 表示用指定的脚本文件来处理输入的文本文件 |
| -h(--help) | 显示帮助 |
| -n,--quiet或--slient | 禁止sed编辑器输出,但可以与p命令一起使用完成输出 |
| -i | 直接修改目标文本文件 |
常用操作
| 操作 | 作用 |
|---|---|
| s | 替换,替换指定字符 |
| d | 删除,删除选定的行 |
| a | 增加,在当前行下方增加一行指定内容 |
| i | 插入,在选定行上方插入一行指定内容 |
| c | 替换,将选定行替换为指定内容 |
| y | 字符转换,转换前后的字符长度必须相同 |
| p | 打印行内容。如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用 |
| = | 打印行号 |
| l | 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t) |
sed功能
| 增 | i (在行前插入内容) a(在行后添加内容) r(在行后读入文件内容) |
|---|---|
| 删 | d |
| 改 | s(字符串替换) c(整行替换) y(对应字符进行替换) |
| 查 | p |
| 复制粘贴 | H(复制) G(粘贴到指定行下) |
sed执行多条功能方法:
sed -n -e '操作1' -e '操作2' 文件
sed -n -e '操作1;操作2' 文件
sed -e 'n{
操作1
操作2
...
}' 文件
sed----查找p打印
sed输出内容
esd编辑器默认会输出行内容,-n选项可以禁止输出。如果不加-n,却使用p操作,那么每行内容会打印两次
sed对指定行进行过滤
用数字表示区间,用字符串来过滤出行
sed----删除d
sed----修改s(字符串替换) c(整行替换) y(对应字符进行替换)
格式
sed [选项] 's/旧字符串/新字符串/替换标记'
替换标记:
| 标记 | 含义 |
|---|---|
| 数字 | 新字符串将会替换第几处匹配的地方 |
| g | 新字符串将会替换所有匹配的地方 |
| p | 打印与替换命令相匹配的行,常与-n一起使用 |
| w 文件 | 将替换的结果写入到文件中 |
将文本中的字符串进行替换