文本三剑客:sed

34 阅读3分钟

sed

sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。

sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sed的工作流程

sed的工作流程主要包括读取、执行和显示三个过程:

读取: sed从输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space )。

执行: 默认情况下,所有的sed命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed命令将会在所有的行上依次执行。

显示: 发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行, 直至所有内容被处理完。

在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

sed命令格式

  • sed -e '操作' 文件1 文件2
  • sed -n -e '操作' 文件1 文件2
  • sed -f 脚本文件 文件1 文件2
  • sed -i -e '操作' 文件1 文件2
操作作用
s替换,替换指定字符
d删除,删除选定的行
a增加,在当前行下方增加一行指定内容
i插入,在选定行上方插入一行指定内容
c替换,将选定行替换为指定内容
y字符转换,转换前后的字符长度必须相同
p打印行内容。如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用
=打印行号
l (小写L)打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t)

sed 查找打印

默认打印

image.png

打印显示行号

image.png

寻址打印

按照行号寻求内容

image.png

image.png

image.png

过滤行内容

image.png

正则表达式打印

image.png

扩展正则表达式

image.png

删除操作

image.png

匹配删除

image.png

联合删除

image.png

sed命令替换

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

替换标记

  • 数字:表明新字符串将替换第几处匹配的地方

  • g:表面新字符串将会替换所有匹配的地方

  • p:打印与替换命令匹配的行,与-n一起使用

  • w 文件:将替换的结果写入文件中

sed命令的替换中

  • s:替换字符串
  • c:整行替换
  • y:字符替换,替换前后的字符串长度必须相同

字符替换

image.png

大小写替换

image.png

整行替换

使用c进行替换,是对整行内容进行替换。

image.png

单字符替换

使用y,是对单个字符进行替换,每个字符需要一一对应,不是整体替换。前后字符串长度需要一致,不然会报错。

image.png

插入内容

a:在行后添加内容

i:在行前插入内容

r:在行后读入文件内容

指定插入

image.png

直接在末行插入其他文件内容

image.png