sed进阶
-
空间
-
模式空间
-
sed编辑器当前正在工作的所在行
-
多行处理
-
跳过行
-
n
-
匹配到所在行后,跳转到下一行执行操作
sed '/target/{n;xxx}' file
-
-
-
合并行
-
N
-
匹配到所在行后,把下一行合并到模式空间执行操作
sed '/target/{N;xxx}' file
-
-
-
合并行后删除行
-
D
-
匹配到所在行后,把下一行合并到模式空间,并删除模式空间的第一行
sed 'N;/target/D' file
-
-
-
合并行后打印行
-
P
-
匹配到所在行后,把下一行合并到模式空间,并打印模式空间的第一行
sed 'N;/target/P' file
-
-
-
-
-
-
保持空间
-
sed编辑器临时保存行的缓冲区
-
命令
-
h
-
已匹配的模式空间复制到保持空间后打印
sed -n '/target/{h;p}' file
-
-
H
-
已匹配模式空间附加到保持空间后打印
sed -n '/target/{H;p}' file
-
-
g
-
已匹配把保持空间复制到模式空间后打印
sed -n '/target/{g;p}' file
-
-
G
-
已匹配把保持空间附加到模式空间后打印
sed -n '/target/{G;p}' file
-
-
x
-
已匹配交换模式空间和保持空间的内容后打印
sed -n '/target/{x;p}' file
-
-
-
-
-
-
排除命令
-
让原来起作用的命令不起作用
-
命令
-
!
-
除了匹配行以外的所有行都打印
sed -n '/target/!p' file
-
-
-
-
-
改变执行顺序
-
分支
-
命令
-
b
-
格式
[address] b [label]
-
无标签
-
跳过不执行指定行
sed '{[address]b; /xxx/xxx/;/xxx/xxx/}' file
-
-
有标签
-
匹配行后跳转到标签,执行标签命令,处理后执行剩余的非标签命令
sed '{/target/b jump1 /xxx/xxx/; /xxx/xxx / :jump /xxx/xxx } ' file
-
-
-
t
-
格式
[address] t [label]
-
无标签
-
测试t前面的命令是否执行成功,接着执行t后面的命令
sed '{/xxx/xxx/ t /xxx/xxx/}' file
-
-
有标签
-
测试t前面的命令是否执行成功,不成功则执行标签命令,最后处理剩余的非标签命令
sed '{/xxx/xxx/ t jump1 /xxx/xxx/ :jump /xxx/xxx/} '
-
-
-
-
-
-
实战
-
处了最后一行,每行后面插入空白行
sed '$!G' file
-
除了最后一行,先删除已有空白行,再插入空白行
sed '/^$/d; $!G' file
-
在每行前一行添加行号
sed '=' file
-
在每行行首添加行号
-
sed '=' file | sed 'N; s/\n/ /'
-
打印最后一行
sed -n '$p' file
-
打印后十行
sed '{ :start ;$q;N;11,$D ;b start}' file
-
只删除连续空行
sed '/./,/^$/!d' file
-
删除开头的空白行
sed '/./,$!d' file
-
删除结尾的空白行
sed '{ :start /^\n*$/ { $d; N; b start}}'
-
删除所有的html标签
sed 's/^<[^>]*>//g' file
-