Shell中的流编辑器sed

流编辑器sed

sed编辑器被称作流编辑器(stream editor),和普通的交互式文本编辑器恰好相反。
在交互式文本编辑器中(比如vim),你可以用键盘命令来交互式地插入、删除或替换数据中的文本。
流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。

语法

sed [options] command file(s)
sed [options] -f scriptfile file(s)

sed 的返回值总是0,不管是否找到指定模式,退出状态总是0;
只有当命令存在语法错误是,退出状态才是非0;
支持正则表达式:sed -r 可以支持扩展元字符 \

基本用法

#打印,sed常用作文件修改,打印使用较少
sed -r 'p' file
#替换,和在vim中的操作一致,/符号可以更换
sed -r 's/root/alice/' filename
sed -r 's#root#alice#' filename
#查找,依然查找上面的字符,必须转义,d表示删除
sed -r '\#root#d' filename
#删除,从am开头的行删除到20行
sed -r '/^am/,20d' filename
#删除,从am开头的行再删除20行
sed -r '/^am/,20d' filename
#删除奇数行
sed -r '1~2d' filename
#删除偶数行
sed -r '0~2d' filename

sed命令

命令功能
s替换,g行内全局替换;i忽略大小写
a在当前行添加一行或多行
c使用新文本替换当前行中的文本
d删除行
i在当前行之前插入文本
l列出费打印字字符
p打印行
n读入下一输入航
q结束或退出sed
!对所选航以外的所有行应用命令
r从文件中读写
w将行写入文件
y将字符串转换为另一字符串(不支持正则)
h把模式空间的内容复制到缓冲区

选项

选项功能
-e允许多项编辑
-f指定sed脚本文件名
-n取消默认输出
-iinpalce就地编辑
-r支持扩展元字符

例子

#在{}中写多个命令
sed -r '3{h;d}' filename
#删除最后一行
sed -r '$d' filename
#&符号表示匹配到的内容,一到五行前面加#
sed -ri '1,5s/.*/#&/' filename
#在第二个字符前加#
sed -ri 's/(.)(.)(.*)/\1#\2\3/' filename
#读到某个位置后在读取其他文件
#读到l在读取其他文件
sed -r '/l/r filename2' filename1
#写入文件
sed -r '3,$w newfile' filename1
#追加,第二行追加hello
sed -r '2a\hello' filename1
#替换,第二行替换成hello
sed -r '2chello' filename1
#插入,第二行插入kkkk
sed -r '2ikkkk' filename1
#找到下一行,进行操作
sed -r '/hello/{n;d}' filename

复杂例子

#删除注释行,一般注释以空格或\t(tab)开头,后面接#
sed -ri '/^[ \t]*#/d' filename
#删除配置文件中//注释的行
sed -ri '\#^[ \t]*//#d' filename
#删除空行
sed -ri '/^[ \t]*$/d' filename
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值