Shell脚本之sed

sed编辑器

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

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

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

sed命令格式

sed  [选项]  ‘操作’   文件1    文件2

选项:

-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑[root@www data]#sed -n -e '/^r/p'  -e'/^b/p' /etc/passwd
-f FILE 从指定文件中读取编辑脚本
-r, -E 使用扩展正则表达式
-i.bak 备份文件并原处编辑
-s  将多个文件视为独立文件,而不是单个连续的长文件流

sed脚本格式 

在单引号中写脚本,脚本格式 ‘地址+命令’

地址格式

1. 不给地址:对全文进行处理(比如行号)
2. 单地址:
   #:指定的行,$:最后一行
   /pattern/:被此处模式所能够匹配到的每一行,正则表达式
3. 地址范围:
   #,#     #从#行到第#行,3,6 从第3行到第6行
   #,+#   #从#行到+#行,3,+4 表示从3行到第7行
   /pat1/,/pat2/    第一个正则表达式和第二个正则表达式之间的行
   #,/pat/  从#号行为开始找到 pat为止 
   /pat/,#  找到#号个pat为止
4. 步进:~
     1~2 奇数行
     2~2 偶数行

命令格式

p         打印当前模式空间内容,追加到默认输出之后
Ip         忽略大小写输出
d         删除模式空间匹配的行,并立即启用下一轮循环
a         [\]text 在指定行后面追加文本,支持使用\n实现多行追加
i         [\]text 在行前面插入文本
c         [\]text 替换行为单行或多行文本
w         file 保存模式匹配的行至指定文件
r         file 读取指定文件的文本至模式空间中匹配到的行后
=        为模式空间中的行打印行号
!         模式空间中匹配行取反处理
q        结束或退出sed

【实例】

1.打印输入数字

2.只显示输入的某一行

3.打印包含关键字的行

4.打印某几行中间几行

sed匹配两个正则表达式之间

 【练习:显示 /var/log/messages 里15:00到16:00的日志】

sed删除 

 删除某一行

 删除某几行

删除指定行并保存

 

 【注,sed -i 是在源文件里进行修改并保存,如果想留一个备份文件的话可以使用 sed -i.bak 进行备份】

sed搜索替换

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

【案例】

将文件中的disable全部替换成enable,使用sed命令

【面试题】

提取版本号

sed变量使用

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值