删除字符串后的所有行,但删除最后几行

时间:2013-07-18 05:23:58

标签: unix sed awk gawk

我的文件包含一些行和一些数字。我想删除特定字符串后的所有行,让我们说字符串是'angle'。我想删除角度之后的所有行,我可以使用sed命令执行此操作,如下所示:

sed -n '/angles/q;p' input file

我的问题是,我想删除角度之后的所有行但是想保留最后四行?我怎么能在sed中这样做?

5 个答案:

答案 0 :(得分:1)

以下内容对您有用:

tac inputfile | sed '5,/angles/d' | tac

说明:反转文件,保留前4行并删除所有内容,直到遇到所需的模式。反转结果。

答案 1 :(得分:1)

这可能适合你(GNU sed):

sed '1,/angles/b;:a;$!{N;s/\n/&/4;Ta;D}' file

打印出从第一行到遇到字符串angles的所有行。然后移动window四行并在文件末尾打印它们。

答案 2 :(得分:0)

在awk中:

awk '{
     if(p!=1)print;
     else{a[NR]=$0}
     if($0~/angles/)p=1
     }
     END{
     for(i=NR-3;i<=NR;i++)print a[i]
     }' your_file

测试如下:

> cat temp
wbj
ergthet
gheheh
wergergkn   angles gerg
er
ergnmer
rgnerk
1
2
3
4
> awk '{if(p!=1)print;else{a[NR]=$0};if($0~/angles/)p=1}END{for(i=NR-3;i<=NR;i++)print a[i]}' temp
wbj
ergthet
gheheh
wergergkn   angles gerg
1
2
3
4
> 

答案 3 :(得分:0)

awk -v size=$(wc -l < file) '
    /angles/       { skip=1 }
    NR >= (size-4) { skip=0 }
    !skip
' file

答案 4 :(得分:0)

我将假设您要查找的字符串可能不止一次出现,而您只想要第一个字符串。如果这是真的,那么撤消文件并不是最好的策略。

{ sed '/angles/q' file; tail -4 file; } > result