У меня есть текстовый файл, который я обрабатываю в скрипте perl. Как удалить 2 или более строк, которые содержат только *. Ввод:
*
some text * some text * * some text * * *
Я хочу, чтобы текст выглядел так:
some text * some text * some text *
Вы можете прочитать весь файл.
perl -0777pe's/^\*\n\K(\*\n)+//mg'
(Выше не будет работать так, как написано, если в последней строке отсутствует терминатор строки.)
Рабочая строка от Строка также довольно проста, так как не нужно заглядывать в будущее.
perl -ne'print if !$flag || !/^\*$/; $flag = /^\*$/;'
Указание файла для обработки Perl однострочный
Вы можете выплескивать или в любом случае считывать весь файл в строку (сегодня на компьютере должно быть достаточно памяти для этого) и заменять любую последовательность специальных строк только одной.
use English; my $contents = do { local $/; <> }; chomp $contents; $contents .= $RS; $contents =~ s/^(\*$RS)+/\1/mg;
'm' Модификатор устанавливает якорь '^' для распознавания начала любой строки вместо начала всей строки.
Другое возможное решение с «одним вкладышем»:
perl -0777 -pe "s/(\n\*)+/$1/g" regex_stars.txt
Вход
Выход