баш:отфильтровать последовательные строки из текстового файла

StackOverflow https://stackoverflow.com/questions/2419868

Вопрос

Я хочу удалить из многих файлов каждый экземпляр параграф.Я называю абзац последовательностью строк.

Например:

my first line
my second line
my third line
the fourth
5th and last

проблема в том, что я хочу удалять их только тогда, когда они появляются как группа.Например, если

my first line
появляется один, я не хочу его удалять.

Это было полезно?

Решение

Если вы умеете использовать Perl, вы можете сделать это в одну строку следующим образом:

perl -0777 -pe 's/my first line\nmy second line\nmy third line\nthe fourth\n5th and last\n//g' paragraph_file

объяснение находится в perlrun:

Специальное значение 00 заставит Perl поглощать файлы в режиме абзаца.Значение 0777 заставит Perl поглощать файлы целиком, поскольку с этим значением не существует допустимого байта.

Пример ввода:

my first line
my second line
my third line
the fourth
5th and last
hey
my first line
my second line
my third line
the fourth
5th and last

hello
my first line

Выход:

$ perl -0777 -pe 's/my first line\nmy second line\nmy third line
\nthe fourth\n5th and last\n//g' paragraph_file
hey

hello
my first line

Другие советы

@OP, я вижу, вы приняли ответ, согласно которому ваши абзацы «жестко закреплены», поэтому я предполагаю, что эти абзацы всегда одинаковы?это правда, ты можешь использовать grep.Сохраните абзац, от которого хотите избавиться, в файле, например «фильтр», затем используйте -f и -v опция grep для выполнения работы,

grep -v -f filter file

Вы можете сделать это с помощью sed:

sed '$!N; /^\(.*\)\n\1$/!P; D' file_to_filter
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top