使用sed,从特定行删除,直到第一个匹配(不包括)

时间:2018-10-11 20:05:44

标签: sed

我有一些数据类似

1:Alice 2313
2:Desctop 456
3:Cook 111
4:.filename 50
...
...
100:Good 3
Dir num:10
File num:90
...
...

我要删除特定行(例如第3行)中的所有行,直到显示“目录号:”行为止。 想法输出应该是(根据上面的示例):

1:Alice 2313
2:Desctop 456
Dir num:10
File num:90
...
...

我有Google的几种解决方案,例如sed -i '/somestring/,$!d' file。 但是这些解决方案不适合,因为删除行有特定的行。

如何在没有任何tmp文件的情况下用1命令执行此操作? 原谅我的英语不好,我不是英语母语人士。

2 个答案:

答案 0 :(得分:0)

您需要指定地址范围,从指定的行号(3)到与模式匹配的行(/Dir num/)。但是,它并不像

那样简单
sed '3,/Dir num/ d' file

因为这将删除“目录号”行。尝试以下方法:

sed '3,/Dir num/ {/Dir num/! d}' file

对于范围中的行,将检查该行是否不匹配与模式匹配:如果该模式不匹配,请将其删除。

答案 1 :(得分:0)

使用range: /pattern1/,/pattern2/的{​​{1}}选项

sed
相关问题