1、Sed 工具概述
Sed(Stream Editor) 的缩写,它是文本处理工具,依赖于正则表达式,可以读取文本内容,根据指定条件对数据进行添加、删除、替换等操作。
Sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。默认情况下,所有sed命令都是在模式空间内执行,因此源文件本身不会发生变化,除非使用重定向存储输出。
1.1、sed 的工作流程
- 读取:sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时缓冲区(又称:模式空间)中
- 执行:默认情况下,所有sed命令都在模式空间中顺序地执行,除非指定行的地址,否则sed命令将会在所有行上依次进行
- 显示:发送修改后的内容到输出流。在发送数据后,模式空间里的内容将会被清空,接着处理下一行,不断重复操作过程,直到文件末尾。
1.2、sed 命令格式
sed -e '编辑指令' 文件1 文件2..
sed -n -e '编辑指令' 文件1 文件2..
sed -i -e '编辑指令' 文件1 文件2...
sed -e 'n{
操作1
操作2
...
}' 文件1 文件2...
编辑指令格式:【地址1】【地址2】操作【参数】
这里的"地址" 可以是正则表达式,也可以是数字、$,如果没有地址就代表是所有的行。
1.3、常用选项
| 选项 | 作用 | 说明 |
|---|---|---|
| -e 或 --expression | 使用命令操作文件 | 表示用指定命令来处理文件,只有一个操作命令时可省略,一般在执行多个操作命令时使用 |
| -f 或--file | 加脚本文件 | 表示使用指定脚本文件(将多个sed命令操作写入脚本文件中)来处理指定文件 |
| -n | 取消默认显示(修改后文件)功能 | 一般可以与p命令组合使用完成输出打印功能 |
| -r | 可以使用扩展正则表达式 | \ |
| -i | 直接修改源文件 | 而不是只在模式空间内修改 |
1.4、常用操作
| 指令 | 作用 |
|---|---|
| p | 打印指定行 如果不指定行,则表示打印所有行内容 通常与选项 "-n" 一起使用 |
| d | 删除指定行 |
| s | 替换指定字符串,格式:"行范围 s/ 旧字符串 / 新字符串 /替换标记" |
| c | 将整行内容替换为指定内容 |
| r | 读取指定文件 |
| y | 替换前和替换后的字符串长度要一致,单个字符一 一对应 |
| a | 在指定行下方插入内容 |
| i | 在指定行上方插入内容 |
| w | 将指定修改后的内容保存到文件中 |
| = | 打印指定行号 |
| n | 把当前操作移动到下一行,类似隔一行执行一次操作命令 |
| q | 退出 |
| l(小写L) | 显示行内容和一些特殊的ASCII码字符 例如:结束符,$,制表符,\t等.. |
2、查看打印指定行
2.1、准备测试文件
2.2、示例1:-n 、p 组合打印
2.3、示例2:打印行号
2.4、示例3:多条命令加"-e"
2.4.1、方法1:
2.4.2、方法2:
2.5、示例4:查看打印指定行操作
2.5.1、以数字形式匹配行区间
2.5.2、以字符串匹配行内容
3、删除行操作
3.1、匹配指定行(区间)删除
3.2、删除空行
3.3、反向删除
4、替换操作
4.1、替换格式、替换标记
格式:行范围 s/ 旧字符串 / 新字符串 /替换标记
4种替换标记:
| 替换标记 | 作用 |
|---|---|
| 数字(n) | 表明新字符串将替换能匹配到的第n处地方 |
| g | 表明新字符串会替换所有能匹配到的地方 |
| p | 打印与替换命令匹配的行,通常与 "-n" 一起使用 |
| w | 文件:将替换的结果写到文件中 |
4.2、替换示例
4.2.1、-f 脚本文件批量执行sed命令
4.2.2、w 将sed命令执行结果写入文件
4.2.3、c 命令-替换整行内容
4.2.5、替换中的分隔符
替换命令中,紧跟"s"后面的字符就是分隔符,分隔符不一定就是"/",可以替换为任意字符,只需要前后统一为同一字符即可!