sed删除某关键字的下一行到最后一行

回复 收藏
[root@test200 ~]# cat test
a
b
c
d
e
f

[root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test
a
b
c

定义一个标签a,匹配c,然后N把下一行加到模式空间里,匹配最后一行时,才退出标签循环,然后命令d,把这个模式空间里的内容全部清除。

if 匹配"c"
:a
追加下一行
if 不匹配"$"
goto a
最后退出循环,d命令删除。

2010-03-12 10:32 举报
已邀请:
0

阿铭 管理员

赞同来自:

由上,我们可以通过sed删除匹配行以及匹配行下一行
sed -i '/sample/{N;d}' filename

//sample是匹配字符,N在这里就是下一行,d是删除
0

Kry1702

赞同来自:

学习勒
0

zh_414

赞同来自:

学习了
0

liaochao1991

赞同来自:

完全看不懂
0

标哥

赞同来自:

看不懂啦..学习。
0

15801184208

赞同来自:

好吧我承认我看不懂..{:4_102:}
0

lipilove123

赞同来自:

看不懂啊。。。。
0

hegeng

赞同来自:

看不懂啊{:4_104:}
0

18222687976

赞同来自:

sed '/c/{p;:a;N;$!ba;d}' test

首先匹配,匹配到c这行
后面定义一个标签,开始循环,下一行一直到结尾都放到模式空间(缓冲区),然后删除模式空间,打印出结果
0

linux007

赞同来自:

看了10分钟,输入命令好几次……依然一脸懵逼的样子

0

lanse

赞同来自:

一脸懵逼,p和a中间除了一个分号,那个是什么?

0

成蹊

赞同来自:

这个有点像编程的条件判断了

0

辅导老师-李贺飞

赞同来自:

[root@test200 ~]# sed '/c/{p;:a;N;$!ba;d}' test    

 p是什么意思呢?

0

派派菠菜

赞同来自:

$!ba这个不太懂,这个是什么意思呢?各位大神们

0

c1awn

赞同来自:

用这种写法也可以:sed -r '/关键词/,$d' filename

[root@c1awn00 test]# sed -r '/d/,$d' 4.txt

a

b

c

0

灵度泪 - -

赞同来自:

学习了 !

0

王旭 - 希望自己能找到心仪的工作

赞同来自:

定义标签p,之后a前面要加个冒号,$!ba怎么理解

0

langlaile

赞同来自:

我来放个简单的

sed -r '/c/,$'d test

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: