如何在vim中跳过两行并删除两行直到文件末尾?

时间:2014-04-21 17:05:05

标签: linux vim awk sed vi

我想跳过两行并删除两行直到文件末尾

如果我的文件包含

111
222
333
444
555
666
777
888
999
1010
1111

我想将其修改为

111
222
555
666
999
1010

4 个答案:

答案 0 :(得分:6)

使用awk

awk 'NR%4==1 || NR%4==2' file
111
222
555
666
999
1010

NR%4==1打印第1,5,9行等 NR%4==2打印第2,6,10行等 所以它给出了1,2,5,6,9,19等行


其他版本:

awk 'NR%4~/^[12]$/' #JS웃
awk '(NR-1)%4<2'    #Ed Morton

答案 1 :(得分:4)

使用sed

sed -n 'p;n;p;n;n' inputfile

对于您的输入,它会产生:

111
222
555
666
999
1010

使用GNU sed:

sed -n '1~4p;2~4p' inputfile

为了好玩,还可以使用perl

perl -ne 'print if grep($_==$.%4,(1,2))' inputfile

答案 2 :(得分:2)

这可能适合你(GNU sed):

sed 'n;n;$!N;d' file

答案 3 :(得分:0)

仅限vim解决方案:

:%norm Jj2dd Aaaaa

然后

:%s/aaaa /\r/g

你需要手动拆分第一行(有n),休息一切就绪。

相关问题