文本工具三剑客之 sed 详解 !!

189 阅读2分钟

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、准备测试文件

43.jpg

2.2、示例1:-n 、p 组合打印

44.jpg

2.3、示例2:打印行号

45.jpg

2.4、示例3:多条命令加"-e"

2.4.1、方法1:

45.jpg

2.4.2、方法2:

45.jpg

2.5、示例4:查看打印指定行操作

2.5.1、以数字形式匹配行区间

46.jpg

46.jpg

47.jpg

48.jpg

49.jpg

50.jpg

51.jpg

2.5.2、以字符串匹配行内容

51.jpg

52.jpg

53.jpg

54.jpg

55.jpg

3、删除行操作

3.1、匹配指定行(区间)删除

56.jpg

59.jpg

3.2、删除空行

57.jpg

3.3、反向删除

58.jpg

4、替换操作

4.1、替换格式、替换标记

格式:行范围 s/ 旧字符串 / 新字符串 /替换标记

4种替换标记:

替换标记作用
数字(n)表明新字符串将替换能匹配到的第n处地方
g表明新字符串会替换所有能匹配到的地方
p打印与替换命令匹配的行,通常与 "-n" 一起使用
w文件:将替换的结果写到文件中

4.2、替换示例

60.jpg

61.jpg

62.jpg

63.jpg

4.2.1、-f 脚本文件批量执行sed命令

64.jpg

65.jpg

4.2.2、w 将sed命令执行结果写入文件

65.jpg

4.2.3、c 命令-替换整行内容

67.jpg

68.jpg

68.jpg

4.2.5、替换中的分隔符

替换命令中,紧跟"s"后面的字符就是分隔符,分隔符不一定就是"/",可以替换为任意字符,只需要前后统一为同一字符即可!

66.jpg

5、新增,添加

5.1、a(在某行下方)插入内容

1.jpg

2.jpg

3.jpg

5.2、i (在某行上方)插入内容

4.jpg

5.3、r 读入文件内容

5.jpg