Linux sed命令使用教程

栏目: Linux 发布时间:2022-02-22

Linux sed 命令是利用脚本来处理文本文件。

sed 的全称是 Stream EDitor。

sed 是一个“非交互式的”面向字符流的编辑器。

sed 可依照脚本的指令来处理、编辑文本文件。

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

sed 语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

参数说明:

-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。

动作说明:

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除,因为是删除,所以 d 后面通常不接任何字符
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g

sed 实例

我们来创建一个 demo.txt 文件用于后续实例的演示(注意,后面的所有实例都基于下面的 demo.txt 内容进行演示,内容不累积)。

创建 demo.txt 文件:

$ echo -e 'hi\nhello\nhello world' > demo.txt

查看 demo.txt 文件内容:

$ cat demo.txt
hi
hello

sed 新增命令:a

1、在 demo.txt 文件的第 2 行后添加 1 行,并将结果输出到标准输出

$ sed -e '2a a new line' demo.txt
hi
hello
a new line
hello world

从上面的运行结果,我们看到 demo.txt 第 2 行下面,即第 3 行新增了 1 行,内容为 “a new line”

2、在 demo.txt 文件中 “hello” 开头的行后面新增 1 行

$ sed '/^hello/a a new line' demo.txt
hi
hello
a new line
hello world
a new line

从上面的运行结果,我们可以看到共匹配到 2 行以 “hello” 开头的行,新增了 2 行内容为 “a new line” 的行

sed 删除命令:d

1、删除 demo.txt 的第 2 行

$ sed '2d' demo.txt
hi
hello world

第 2 行内容 “hello” 被成功删除了

2、删除包含 hello 的行:

$ sed '/hello/d' demo.txt

查看执行结果:

$ cat demo.txt
hi

sed 插入命令:i

1、在 demo.txt 文件最后插入一行 “the end”

$ sed -i '$a the end' demo.txt

查看执行后的结果:

$ cat demo.txt
hi
hello
hello world
the end

2、在 demo.txt 文件匹配 hello 并在其前 1 行插入 “insert a new line before hello”

执行插入命令:

$ sed -i '/hello/i insert a new line before hello' demo.txt

查看执行结果:

$ cat demo.txt
hi
insert a new line before hello
hello
insert a new line before hello
hello world

3、在 demo.txt 文件匹配 hello 并在其后 1 行插入 “insert a new line after hello”

执行插入命令:

$ sed -i '/hello/a insert a new line after hello' demo.txt

查看执行结果:

$ cat demo.txt
hi
hello
insert a new line after hello
hello world
insert a new line after hello

sed 替换命令:s

将 demo.txt 文件中所有 hello 替换为 HELLO:

$ sed 's/hello/HELLO/g' demo.txt
hi
HELLO
HELLO world

sed 替换命令:c

$ sed '1,2c a new line replace line 1-2' demo.txt
a new line replace line 1-2
hello world

本文地址:https://www.tides.cn/p_linux-sed