Linux sed 命令

定义

sed 是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在称为“模式空间”(pattern space)的临时缓冲区中,接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。

使用sed做替换

[trafodion@esggy-clu-n018 ~]$ cat sed_txt 
aaa,123,456
bbb,234,567
ccc,345,678
//替换所有匹配/g
[trafodion@esggy-clu-n018 ~]$ cat sed_txt  | sed 's/,/:/g'
aaa:123:456
bbb:234:567
ccc:345:678
//替换第1个匹配
[trafodion@esggy-clu-n018 ~]$ cat sed_txt  | sed 's/,/:/' 
aaa:123,456
bbb:234,567
ccc:345,678
//替换第2个匹配
[trafodion@esggy-clu-n018 ~]$ cat sed_txt  | sed 's/,/:/2'
aaa,123:456
bbb,234:567
ccc,345:678
//从第2个开始替换
[trafodion@esggy-clu-n018 ~]$ cat sed_txt  | sed 's/,/:/2g'  
aaa,123:456
bbb,234:567
ccc,345:678
//替换第一个,为,,
[trafodion@esggy-clu-n018 ~]$ cat sed_txt | sed 's/^.*\(,\).*,.*$/\1,/'
,,
,,
,,

使用sed做删除(替换为空)

[trafodion@esggy-clu-n018 ~]$ cat sed_txt 
aaa,123,456
bbb,234,567
ccc,345,678
//删除所有匹配
[trafodion@esggy-clu-n018 ~]$ cat sed_txt | sed 's/,//g'
aaa123456
bbb234567
ccc345678
//删除第1个匹配
[trafodion@esggy-clu-n018 ~]$ cat sed_txt | sed 's/,//' 
aaa123,456
bbb234,567
ccc345,678
//删除第2个匹配
[trafodion@esggy-clu-n018 ~]$ cat sed_txt | sed 's/,//2'
aaa,123456
bbb,234567
ccc,345678

使用sed删除空行

[trafodion@esggy-clu-n018 ~]$ cat sed_txt 
aaa,123,456

bbb,234,567

ccc,345,678
[trafodion@esggy-clu-n018 ~]$ cat sed_txt | sed '/^$/d'
aaa,123,456
bbb,234,567
ccc,345,678

使用sed删除指定行

[trafodion@esggy-clu-n018 ~]$ cat sed_txt 
aaa:123:456
bbb:234:567
ccc:345:678
//删除第1行
[trafodion@esggy-clu-n018 ~]$ sed '1d' sed_txt 
bbb:234:567
ccc:345:678
//删除1~2行
[trafodion@esggy-clu-n018 ~]$ sed '1,2d' sed_txt  
ccc:345:678
//删除所有行
[trafodion@esggy-clu-n018 ~]$ sed '1,$d' sed_txt
//删除以aaa开头的行
[trafodion@esggy-clu-n018 ~]$ sed '/^aaa/d' sed_txt    
bbb:234:567
ccc:345:678
//删除包含678的行
[trafodion@esggy-clu-n018 ~]$ sed '/678/d' sed_txt 
aaa:123:456
bbb:234:567

使用sed添加行

[trafodion@esggy-clu-n018 ~]$ cat sed_txt 
aaa,123,456
bbb,234,567
ccc,345,678
//第1行前添加,1i
[trafodion@esggy-clu-n018 ~]$ cat sed_txt | sed '1iddd,111,222'   
ddd,111,222
aaa,123,456
bbb,234,567
ccc,345,678
//第1行后添加,1a
[trafodion@esggy-clu-n018 ~]$ cat sed_txt | sed '1addd,111,222'
aaa,123,456
ddd,111,222
bbb,234,567
ccc,345,678

sed直接修改文件

默认情况下sed不直接修改文件,如果希望直接修改文件,需要使用-i

[trafodion@esggy-clu-n018 ~]$ cat sed_txt 
aaa,123,456
bbb,234,567
ccc,345,678
[trafodion@esggy-clu-n018 ~]$ sed -i 's/,/:/g' sed_txt 
//查看文件已被修改
[trafodion@esggy-clu-n018 ~]$ cat sed_txt              
aaa:123:456
bbb:234:567
ccc:345:678

sed子串匹配标记\1

例:截取字符串中特定位置的数值,\1代表(与)之间的内容,可以是正则表达式

[root@cs01 ~]# echo this is digit 7 in a number | sed -n 's/.*\([0-9]\).*/\1/p'
7

如果想获取多个匹配串,可以依次使用\1、\2、\3依次类推

[root@cs01 ~]# echo this is digit 7 or 8 or 9 in a number | sed -n 's/.*\([0-9]\).*\([0-9]\).*\([0-9]\).*/\1\2\3/p'
789
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值