-n 静默输出
-e 多个命令时需要:sed -e 's/ / /g' -e's/ / /g' test 或者sed 's/ / /g' ;'s/ / /g' test ;号代替
sed -itxt 's///' test 得到==testtxt 添加后缀
-f 编辑的脚本用来实现多个命令,sed -f s.txt test1 用脚本s.txt 编辑test1
test:
1------9
2-----8
3-----7
4
5
6
7
8
9
sed -n '1,3p' test p:打印 打印1到3行
sed -n '2,+4p' test 第2行加后面的4行
sed -n '4,3p' test 第4行加下一个3的倍数 4,5,6
3,3p ---------------3,4,5,6行
5,3p ----------5,6行
7,3p------------7,8,9行
sed -n '1~3p' test 所有间隔3行的行
正则必须用//包裹起来
扩展正则需要用 -r 参数或转移
范例:
#cat file.txt
.TS
Beijing,CN
.TE
Shanghai,CN
guangzhou,CN
shenyang,CN
#sed ‘/Beijing/s/CN/China/' file.txt
删除所有的行
d
只删除第一行
1d
使用寻址符号$,删除最后一行
$d
删除空行,正则表达式必须封闭在斜杠//当中
/^$/d
删除.TS 和.TE 标记的tbl 输入
/^\.TS/,/^\.TE/d
删除第五行到结尾所有的行
5,$d
混合使用行地址和模式地址
#sed ‘1,/^$/d' file.txt
删除除了那些行以外的行
1,5!d
工作模式:模式空间和保持空间介绍
模式空间:初始化为空,处理完一行后会自动输出到屏幕并清除模式空间。
保持空间:初始化为一个空行,也就是默认带一个\n,处理完后不会自动清除。
#sed -e ‘s/pig/cow/’ -e ‘s/cow/horse/’
#sed '1{p;p}' a.txt
11111111
11111111
11111111
22222222
33333333
44444444
55555555
66666666
置换:模式空间和保持空间(暂存空间)
h 把模式空间内容覆盖到保持空间中
H 把模式空间内容追加到保持空间中
g 把保持空间内容覆盖到模式空间中
G 把保持空间内容追加到模式空间中
x 交换模式空间与保持空间的内容
# cat test.sh
1111111
2222222
3333333
4444444
# sed '{1h;2,3H;4G}' ./test.sh
1111111
2222222
3333333
4444444
1111111
2222222
3333333
# sed '{1h;2x;3g;$G}' ./test.sh
1111111
1111111
2222222
4444444
2222222
sed G test 文件每行下面输出一个空格
sed '/^$/d;G' 每个非空行下一行输出一个空行
sed '/^$/d;G;G' 每个非空行下一行输出两个空行
有时:由空格或者Tab键组成的空行
sed '/[[ ]]/d:G'
sed '/test/{x;p;x}' 在test所有行中前面插入空行
sed '/test/{x;p;x;G}' 在test所有行中前后插入空行
x;p;x 前 | 后G
sed 'n;G' 偶数行插入一个空行
sed 'n;n;G' 第3,6,9,12.......行后面插入空格
sed 'n;n;n;G' 第4,8,16.。。。。行后插入空格
sed 'n;d' 删除偶数行
sed 'n;n;d' 删除第3,6,9,12行 同理
控制流
! 命令取反 例: 1!d 删除第一行以外的行
{} 命令组合 命令用分号分隔 {1h;G} 可以理解为 -e 参数的另一种写法
= 打印行号(输入行的号码,而非处理的次数行号) 例如: sed -n '2{=;p}' infile
n 读入下一行到模式空间 例:'4{n;d}' 删除第5行
N 而是追加下一行到模式空间,再把当前行和下一行同时应用后面的命令
P 输出多行模式空间的第一部分,直到第一个嵌入的换行符为止。在执行完脚本的最后一个命令之后,模式空间的内容自动输出。
P命令经常出现在N命令之后和D命令之前。
D 删除模式空间中直到第一个换行符的内容。它不会导致读入新的输入行,相反,它返回到脚本的顶端,将这些指令应用与模式空间剩余的内容。
这三个命令能建立一个输入、输出循环,用来维护两行模式空间,但是一次只输出一行。
这个循环的目的是只输出模式空间的第一行,然后返回到脚本的顶端将所有的命令应用于模式空间的第二行。没有这个循环,当执行脚本中的最后一个命令时,模式空间中的这两行都将被输出。
删除文件倒数第二行
sed 'N;$!P;D' a.txt
删除文件最后两行
sed 'N;$!P;$!D;$d' a.txt
输出文件最后2行=tail -2 test
sed '$!N;$!D'
输出最后一行
sed '$!D' test
sed '1h;0~2G' test 将第一行插入到2的倍数行后面
sed '1h;3G' test 将第一行插入到3的倍数行后面
sed '1h;nG' test 将第一行插入到n的倍数行后面
同理 sed '2h;3G' test 将第二行插入到3的倍数行后面
多种用法:
解释:
N 的作用是加上行号,可以用于格式化输出文件