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实例

上方插入

打印指定多行内容

提前退出

删除

替换

显示行号

不打印特定的行

打印最后一行

打印范围内容


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

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

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


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

5. 搜索替代 

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

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

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

全局替换

查看日志

6. 分组调用

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

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

提取ip地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值