shell脚本之sed

1. sed的定义

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快。

2. sed编辑器的工作流程


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

读取: sed从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中。
执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行, 除非指定了行的地址,否则sed命令将会在所有的行上依次执行。
显示:发送修改后的内容到输出流(屏幕)。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

3.  命令格式

sed [option]... 'script;script;...' [input  file...]
     选项         自身脚本语法         支持标准输入管道

常用选项:

-n 不输出模式空间内容,即不自动打印,加p恢复自动打印
-e 多点编辑
-f 从指定文件中读取编辑脚本
-r  -E 使用扩展正则表达式
-i 备份文件并原处编辑

常用语法选项:

p 手动打印
q 提前退出(3q在第三行退出)
a 追加(3a在第三行后面追加)
i 上方插入(3i在第三行上方插入)
c 替换(3c将第三行整行替换)
d 删除(3d删除第三行)
= 显示行号

4. sed实例

shell脚本之sed_第1张图片

上方插入

shell脚本之sed_第2张图片

打印指定多行内容

shell脚本之sed_第3张图片

shell脚本之sed_第4张图片

提前退出

shell脚本之sed_第5张图片

删除

shell脚本之sed_第6张图片

替换
shell脚本之sed_第7张图片

显示行号

shell脚本之sed_第8张图片

不打印特定的行

shell脚本之sed_第9张图片

打印最后一行

shell脚本之sed_第10张图片

打印范围内容


sed -n '//,//p' 文件名
#第一个//表示开头位置,第二个//表示结尾位置
sed -n '/^r/,/^f/p' /etc/passwd
#以r开头 f开头结尾 第二轮以r开头 后面没有以f开头结尾 则显示全部

shell脚本之sed_第11张图片

'#,/关键字/p'从第#行开始匹配

shell脚本之sed_第12张图片

‘/关键字/,#’ 找到第#个关键字为止

shell脚本之sed_第13张图片


seq 10 |sed -n '1~2p'
seq 10 |sed '2~2d'
#打印奇数行
 
seq 10 |sed -n '2~2p'
seq 10 |sed '1~2d'
#打印偶数行

shell脚本之sed_第14张图片

5. 搜索替代 

格式:格式:sed 行范围 s/旧字符串/新字符串/替换标记

s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
替换修饰符:
g 行内全局替换
p 显示替换成功的行
w   /PATH/FILE 将替换成功的行保存至文件中
I,i   忽略大小写

修改selinux开机不自启配置文件

shell脚本之sed_第15张图片

全局替换

shell脚本之sed_第16张图片

查看日志

shell脚本之sed_第17张图片

6. 分组调用

#分组使用()(),调用第一段使用\1

shell脚本之sed_第18张图片

分别调用第一组,第二组,第三组

提取ip地址

shell脚本之sed_第19张图片

你可能感兴趣的:(linux,运维,服务器)