Linux文本三剑客-sed编辑器

134 阅读4分钟

前言

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

Snipaste_2022-09-05_19-33-12.png

常用选项

选项作用
-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操作,那么每行内容会打印两次

Snipaste_2022-09-13_15-14-14.png Snipaste_2022-09-13_15-17-29.png Snipaste_2022-09-13_15-19-53.png

sed对指定行进行过滤

用数字表示区间,用字符串来过滤出行

Snipaste_2022-09-13_15-49-48.png

sed----删除d

Snipaste_2022-09-13_14-47-07.png

sed----修改s(字符串替换) c(整行替换) y(对应字符进行替换)

格式

sed [选项] 's/旧字符串/新字符串/替换标记'

替换标记:

标记含义
数字新字符串将会替换第几处匹配的地方
g新字符串将会替换所有匹配的地方
p打印与替换命令相匹配的行,常与-n一起使用
w 文件将替换的结果写入到文件中

Snipaste_2022-09-13_15-09-00.png Snipaste_2022-09-05_14-54-22.png

将文本中的字符串进行替换

Snipaste_2022-09-13_16-06-12.png

sed----增加i (在行前插入内容) a(在行后添加内容) r(在行后读入文件内容)

Snipaste_2022-09-13_14-09-57.png

Snipaste_2022-09-13_14-11-07.png

sed----复制粘贴H(复制) G(粘贴到指定行下)

Snipaste_2022-09-13_14-05-11.png