定义
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