sed

-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_第1张图片

sed  '1h;nG'  test   将第一行插入到n的倍数行后面

同理 sed  '2h;3G'  test  将第二行插入到3的倍数行后面

sed_第2张图片

多种用法:

sed_第3张图片
sed  '1!G;h;$!d'  test   文件内容颠倒上下


sed_第4张图片
sed   '/3/{x;p;x;G}'  test    第3行前后输出空格


sed_第5张图片
sed_第6张图片


sed_第7张图片
删除最后一行。最后2行


sed_第8张图片


sed_第9张图片


sed_第10张图片
显示行号


sed_第11张图片
sed_第12张图片
sed_第13张图片
N是行号 /空格/  是每行行号与内容的距离


sed_第14张图片
行号

解释:

N 的作用是加上行号,可以用于格式化输出文件

你可能感兴趣的:(sed)