在Linux/UNIX 系统中包含很多种类的文本处理器或文本编辑器,其中grep,sed,awk是Shell 编程中经常用到的文本处理工具, 被称之为Shell编程三剑客
一.sed概述
sed介绍
sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于Shell脚本中,用以完成各种自动化处理任务。
sed工作流程
sed 的工作流程主要包括读取、执行和显示三个过程。
读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。##
显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
注:默认情况下所有的 sed 命令都是在模式空间内执行的,在不使用-i时,不会修改原文件内容
sed基本格式
sed [选项] +‘操作’ +参数
或
sed [选项] -f +scriptfile(脚本文件) +参数
“参数”是指操作的目标文件, 当存在多个操作对象时用,文件之间用逗号“,”分隔;
scriptfile 表示脚本文件,需要用“-f” 选项指定,当脚本文件出现在目标文件之前时,表示通过指定的脚本文件来处理输入的目标文件。
sed常用选项:
-e #表示用指定命令或者脚本来处理输入的文本文件
-f #表示用指定的脚本文件来处理输入的文本文件
-n #仅显示处理后的结果。
-i.bak: #直接编辑文本文件,并备份
-r,-E #使用扩展正则表达式
-s #将多个文件视为独立文件,而不是单个连续的长文件流
sed常用操作:
a:增加,在当前行下面增加一行指定内容
c:替换,将选定行替换为指定内容
d:删除,删除选定的行
i:插入,在选定行上面插入一行指定内容。
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。
s:替换,替换指定字符。
y:字符转换。
sed常规用法
使用test.txt内的内容测试
1 he was short and fat.
2 He was wearing a blue polo shirt with black pants.
3 The home of Football on BBC Sport online.
4 the tongue is boneless but it breaks bones.12!
5 google is the best tools for search keyword.
6 The year ahead will test our political establishment to the l imit.
7 PI=3.141592653589793238462643383249901429
8 a wood cross!
9 Actions speak louder than words
10
11
12 #woood #
13 #woooooood
14 # AxyzxyzxyzxyzC
15 I bet this place is really spooky late at night!
16 Misfortunes never come alone/single.
输出-n
使用-n选项,将符号条件的内容,输出到屏幕上
1.输出文本内容,等同于cat
2.输出文本的指定行
.输出包含某些字符的行
sed 命令结合正则表达式时,正则表达式以“/”包围
删除
在操作中使用d,将符合条件的内容删除
为了便于观察,使用nl命令查看文本行数,再用管道符号进行sed输出
1.删除指定行
删除包含某些字符的行
替换字符
在操作中使用s替换符号条件的内容
使用sed关闭linux系统的安全机制
替换行
在操作中使用c替换符号条件的整行内容
添加行
在操作中使用a添加内容
迁移行
在使用sed命令迁移行时,常用到以下参数
H:复制到剪贴板;
g、G:将剪贴板中的数据覆盖/追加至指定行;
w:保存为文件;
r:读取指定文件;
I,i 忽略大小写
文件输出:
文件插入:
分组操作
当我们需要对一行数据进行多次操作的时候我们可以使用{}进行分组
sed应用
sed广泛应用于Shell脚本中,用以完成各种自动化处理任务。
比如我们编写一个简单的自动配置vsftpd服务配置的脚本
总结:
1.{n;p}为偶数行,{p;n}为奇数行
2.sed 命令结合正则表达式时,正则表达式以“/”包围
3.在使用sed时,-i选项要慎重,因为-i后原文件将被修改
4.sed广泛用于脚本中,用于删选出我们想要的信息,进行自动化运维