从每个起点删除N行

时间:2010-06-12 04:49:47

标签: linux perl scripting

如何从我看到的单词的每个实例开始删除6行?

4 个答案:

答案 0 :(得分:5)

我认为这个sed命令会做你想要的:

sed '/bar/,+5d' input.txt

删除包含文本bar以及以下五行的任何行。

按上述方式运行以查看输出。如果您知道它正常工作,请使用开关--in-place=.backup来实际执行更改。

答案 1 :(得分:3)

这个简单的perl脚本将删除包含单词“DELETE6”和5个连续行(共6行)的每一行。它还将以前版本的文件保存在FILENAME.bak中。要运行脚本:

  

perl script.pl FILE_TO_CHANGE

#!/usr/bin/perl

use strict;
use warnings;

my $remove_count = 6;
my $word = "DELETE6";

local $^I = ".bak";
my $delete_count = 0;
while (<>) {
    $delete_count = $remove_count if /$word/; 
    print if $delete_count <= 0;
    $delete_count--;
}

HTH

答案 2 :(得分:1)

perl -i.bak -n -e '$n ++; $n = -5 if /foo/; print if $n > 0' data.txt

答案 3 :(得分:0)

perl -ne 'print unless (/my_word/ and $n = 1) .. ++$n == 7'

请注意,如果跳过的行中出现my_word,则不会重置计数器。