Удаление N строк из каждой начальной точки - PullRequest
4 голосов
/ 12 июня 2010

Как мне удалить 6 строк, начиная с каждого экземпляра слова, которое я вижу?

Ответы [ 4 ]

5 голосов
/ 12 июня 2010

Думаю, эта команда sed сделает то, что вы хотите:

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

Удаляет любую строку, содержащую текст bar плюс пять следующих строк.

Запустите, как указано выше, чтобы увидеть вывод. Когда вы знаете, что он работает правильно, используйте переключатель --in-place=.backup, чтобы фактически выполнить изменение.

3 голосов
/ 12 июня 2010

Этот простой 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

1 голос
/ 12 июня 2010
perl -i.bak -n -e '$n ++; $n = -5 if /foo/; print if $n > 0' data.txt
0 голосов
/ 12 июня 2010
perl -ne 'print unless (/my_word/ and $n = 1) .. ++$n == 7'

Обратите внимание, что если в пропущенных строках появляется my_word, счетчик не будет сброшен.

...