linux shell之sed


sed(Stream Editor)是一款强大流式、非交互式的编辑器,集合正则表达式,可以对标准输出或者其他输出进行处理并输出。 sed的强项是替换文本中的特定字符,而写 shell有个步骤就是从一段文本中截取一段字符进行处理,所以熟练掌握 sed命令是写 shell脚本的基本技能。

sed主要是用来将数据进行选取、替换、删除、新増。

1. 概述

1.1 工作原理

对指定输入流数据,sed是顺序逐行进行处理,具体处理流程如下:

  • 从指定输入读入一行数据,存入模式空间(Pattern Space)临时缓冲区;
  • 按照指定sed编辑命令处理缓冲区的内容;
  • 移除缓冲区内容,并将其输出;
  • 直到处理完所有内容。

1.2 与vim的区别

vim需要通知处理文件哪几行才会去处理,sed默认会处理文件的所有行,除非你告诉它不处理哪几行。

2. 基本语法

sed进行的操作,并不会直接改变原文件内容,而是把修改结果只显示到屏幕上,除非使用-i选项才会对原文件内容进行修改。

sed [option] [commands] [inputfile]

2.1 选项

option描述
-n一般情况下,sed命令会把所有数据都输出到屏幕上。如果加入此选项,则只会把经过sed命令处理的行输出到屏幕上
-e允许对输入数据应用多条sed命令编辑
-f脚本文件名:从sed脚本中读入sed操作。和 awk命令的-f选项非常类似
-rsed中支持扩展正则表达式
-ised的修改结果直接修改读取数据的文件,而不是由屏幕输出动作
a \行追加,在当前行后添加一行或多行。当添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结
c \行替换,用c后面的字符串替换原数据行。当替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结
i \行插入,在当前行前插入一行或多行。当插入多行时,除最后一行外,每行末尾需要用“\”代表数据未完结
d行删除,删除指定的行
p行打印,输出指定的行
s字符串替换,用一个字符串替换另一个字符串。格式为:s/旧字串/新字串/g

2.2 示例

2.2.1 多行删除

删除指定1~5行数据之后输出,包括15行,注意不会修改原文件内容

[root@master-zeus ~]# cat /etc/passwd | sed -e "1,5d"

2.2.2 正则匹配

删除正则匹配的行,如果匹配就执行命令p(即,打印)。其中,命令-n告知sed不需要每行执行输出,根据后面命令进行处理。

[root@master-zeus ~]# cat /etc/passwd | sed -n -e "/root/p"

2.2.2 正则块匹配

从第一个正则匹配开始,到第二个正则匹配结束的所有行,然后执行命令p。注意,均包含开始和结束匹配行

[root@master-zeus ~]# cat /etc/passwd | sed -n -e "/begin/,/end/p"

2.2.3 替换

指定范围是1~20行,执行root全局替换为admin之后打印到屏幕。

[root@master-zeus ~]# cat /etc/passwd | sed -n -e "1,20s/root/admin/gp"
admin:*:0:0:System Administrator:/var/admin:/bin/sh
daemon:*:1:1:System Services:/var/admin:/usr/bin/false

如果数据包含/,那么可以重新指定分隔符,下列将分隔符指定为:

[root@master-zeus ~]# echo "/usr/local/bin" \| sed -n -e "s:/usr/local:/usr:gp"
/usr/bin

2.3 组合命令

2.3.1 组合多条命令

命令=表示打印行号,命令p表示打印,用分号(;)分开串行处理。

[root@master-zeus ~]# sed -n -e "=;p" /etc/passwd

2.3.1 地址范围操作多条命令

地址范围为1~20行,执行命令包括:sbin/nologin全局替换为bin/zsh:全局替换为|

[root@master-zeus ~]# sed -n -e "1,20{s:sbin/nologin:bin/zsh:g;s/:/|/g;p}" /etc/passwd
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值