Shell脚本文本三剑客之Sed

目录

一、Sed编辑器

1.1 Sed概述

1.2 Sed工作流程

1.3 Sed基本用法

1.4 Sed常用选项

1.5 sed命令的常用操作

常见的操作

二、用法示例

2.1 输出符合条件的文本(p 表示正常输出)

示例1:打印文件第n行

示例2:打印文件第4-7行

 示例3:打印奇数行​

示例4:打印偶数行

示例5:从第十行开始打印偶数行

示例6:打印第二行所有内容

示例7:打印文件中所有带the的行

示例8:从第四行开始打印文件中带the的行

示例9:输出文件中带the的行号

示例10:打印以PI开头的行  打印以he开头的行

示例11:打印以数字结尾的行

示例12:输出包含单词wood 的行,\<、\>代表单词边界

2.2 删除符合条件的文本(d)

示例1:打印文件中删除6-9行的内容

示例2:删除包含wood的行,第八行包含已被删除

示例3:删除以a-z开头的所有行

示例4:删除所有以“.”结尾的行

示例5:删除文件中所有空行

2.3 替换符合条件的文本

示例1:把每行的第一个the换成THE

示例2:把前面的oo换成00

示例3:把每行第二个l换成L

示例4:把文件中所有o替换为空行

示例5:sed -i   直接编辑文本文件

2.4 迁移符合条件的文本

参数

示例1:将包含the的行迁移到文件末尾,{;}用于多个操作

示例2:将第1-5行内容转移到第14行后

示例3:把包含the的行另存为out.test

示例4:将文件/etc/hostname(主机名)添加到包含the的每行以后

示例5:在第4行后插入一个新行,内容为youshoujiuxing

示例6:在包含the的每行后插入一个新行,内容为NIU

示例7: 在第4行后插入多行内容,中间的\n表示换行

2.5 使用脚本编辑文件

示例


一、Sed编辑器

1.1 Sed概述

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

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

1.2 Sed工作流程

sed 的工作流程主要包括读取、执行和显示三个过程: 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行。 显示font>:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。

PS:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。

1.3 Sed基本用法

sed -e '编辑指令' 文件1 文件2

sed -n -e '编辑指令' 文件1 文件2

sed -i -e '编辑指令' 文件1 文件2

sed -f 脚本文件 文件1 文件2

1.4 Sed常用选项

-e 或--expression=:表示用指定命令或者脚本来处理输入的文本文件。
-f 或--file=:表示用指定的脚本文件来处理输入的文本文件。
-h 或--help:显示帮助。
-n、--quiet 或 silent:表示仅显示处理后的结果。
-i.bak:直接编辑文本文件。
-r, -E 使用扩展正则表达式
-s  将多个文件视为独立文件,而不是单个连续的长文件流

1.5 sed命令的常用操作

“操作”用于指定对文件操作的动作行为,也就是 sed 的命令。通常情况下是采用的“[n1[,n2]]”操作参数的格式。n1、n2 是可选的,代表选择进行操作的行数,如操作需要在 5~ 20 行之间进行,则表示为“5,20 动作行为”。常见的操作包括以下几种。

常见的操作

a 增加,在当前行下面增加一行指定内容。
c 替换,将选定行替换为指定内容。
d 删除,删除选定的行。
i 插入,在选定行上面插入一行指定内容。
p 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。
s 替换,替换指定字符。
y 字符转换。
= 打印行号。
l(小写L) 打印数据流中的文本和不可打印的ASCII字符(比如结束符s、制表符\t)

二、用法示例

2.1 输出符合条件的文本(p 表示正常输出)

以test.txt文件为例

sed -n 'p' test.txt 输出所有内容,等同于 cat test.txt

示例1:打印文件第n行

Shell脚本文本三剑客之Sed_第1张图片

示例2:打印文件第4-7行

Shell脚本文本三剑客之Sed_第2张图片

 示例3:打印奇数行Shell脚本文本三剑客之Sed_第3张图片

示例4:打印偶数行

示例5:从第十行开始打印偶数行

示例6:打印第二行所有内容

示例7:打印文件中所有带the的行

示例8:从第四行开始打印文件中带the的行

示例9:输出文件中带the的行号

示例10:打印以PI开头的行  打印以he开头的行

Shell脚本文本三剑客之Sed_第4张图片

示例11:打印以数字结尾的行

示例12:输出包含单词wood 的行,\<、\>代表单词边界

2.2 删除符合条件的文本(d)

因为后面的示例还需要使用测试文件 test.txt,所以在执行删除操作之前需要先将测试文件备份。以下示例分别演示了 sed 命令的几种常用删除用法。
下面命令中 nl 命令用于计算文件的行数,结合该命令可以更加直观地查看到命令执行的结果。

示例1:打印文件中删除6-9行的内容

Shell脚本文本三剑客之Sed_第5张图片

示例2:删除包含wood的行,第八行包含已被删除

Shell脚本文本三剑客之Sed_第6张图片

示例3:删除以a-z开头的所有行

Shell脚本文本三剑客之Sed_第7张图片

示例4:删除所有以“.”结尾的行

Shell脚本文本三剑客之Sed_第8张图片

示例5:删除文件中所有空行

Shell脚本文本三剑客之Sed_第9张图片

2.3 替换符合条件的文本

在使用sed命令进行替换操作时需要用到s(字符串替换)、c(整行、整块替换)、y(字符转换)命令选项

示例1:把每行的第一个the换成THE

Shell脚本文本三剑客之Sed_第10张图片

示例2:把前面的oo换成00

Shell脚本文本三剑客之Sed_第11张图片

示例3:把每行第二个l换成L

Shell脚本文本三剑客之Sed_第12张图片

示例4:把文件中所有o替换为空行

Shell脚本文本三剑客之Sed_第13张图片

示例5:sed -i   直接编辑文本文件

Shell脚本文本三剑客之Sed_第14张图片Shell脚本文本三剑客之Sed_第15张图片

2.4 迁移符合条件的文本

 在使用sed命令迁移符合条件的文本时,常用到以下参数。

参数:

H:复制到剪贴板;
g、G:将剪贴板中的数据覆盖/追加至指定行;
w:保存为文件;
r:读取指定文件;
a:追加指定内容。具体操作方法如下所示。
I,i   忽略大小写

示例1:将包含the的行迁移到文件末尾,{;}用于多个操作

Shell脚本文本三剑客之Sed_第16张图片

示例2:将第1-5行内容转移到第14行后

Shell脚本文本三剑客之Sed_第17张图片

示例3:把包含the的行另存为out.test

Shell脚本文本三剑客之Sed_第18张图片

示例4:将文件/etc/hostname(主机名)添加到包含the的每行以后

Shell脚本文本三剑客之Sed_第19张图片

示例5:在第4行后插入一个新行,内容为youshoujiuxing

Shell脚本文本三剑客之Sed_第20张图片

示例6:在包含the的每行后插入一个新行,内容为NIU

Shell脚本文本三剑客之Sed_第21张图片

示例7: 在第4行后插入多行内容,中间的\n表示换行

Shell脚本文本三剑客之Sed_第22张图片

2.5 使用脚本编辑文件

使用 sed 脚本将多个编辑指令存放到文件中(每行一条编辑指令),通过“-f”选项来调用。例如执行以下命令即可将第 1~5 行内容转移至第 16 行后。

示例:

sed '1,5{H;d};16G' test.txt    //将第 1~5 行内容转移至第 16 行后

Shell脚本文本三剑客之Sed_第23张图片

以上操作可以改用脚本文件方式:

Shell脚本文本三剑客之Sed_第24张图片Shell脚本文本三剑客之Sed_第25张图片


 

你可能感兴趣的:(编辑器,linux,运维)