Как удалить определенную строку и следующую пустую строку с помощью GNU sed?

У меня есть следующий текст:

Start-Date: 2013-11-11 07:43:49 Commandline: apt-get install --no-install-recommends catfish Start-Date: 2013-11-11 11:27:07 Start-Date: 2013-10-16 22:53:02 Start-Date: 2013-10-16 22:55:16 Start-Date: 2013-10-17 22:41:09 Start-Date: 2013-10-17 22:42:02 Start-Date: 2013-10-17 22:42:33 Start-Date: 2013-10-17 22:46:01 Start-Date: 2013-10-17 23:00:06 Commandline: apt-get install shimmer-themes Start-Date: 2013-10-17 23:01:52 Commandline: apt-get install --no-install-recommends gedit 

Я хотел бы удалить строки, начинающиеся с «Start-Date» и следующей пустой строки. Другими словами, я хотел бы иметь просто:

 Start-Date: 2013-11-11 07:43:49 Commandline: apt-get install --no-install-recommends catfish Start-Date: 2013-10-17 23:00:06 Commandline: apt-get install shimmer-themes Start-Date: 2013-10-17 23:01:52 Commandline: apt-get install --no-install-recommends gedit 

Надеюсь, мой вопрос не является дубликат строки «Удалить», содержащей определенную строку, и следующую строку

3 Solutions collect form web for “Как удалить определенную строку и следующую пустую строку с помощью GNU sed?”

 sed '/^Start-Date:/ {N; /\n$/d}' 

sed – редактор потока, разрывает / идентифицирует линейные гагары и у вас с ними.

N – «добавить новую строку и следующую строку ввода в текущий буфер», поэтому \n в буфере – это начало добавленной строки /\n$/d означает «если последняя добавленная строка в буфере пуста, просто нажмите все это".

awk может помочь:

 $ awk '{if ($1=="Commandline:") {printf "%s\n%s\n\n", l,$0}; l=$0}' test.txt Start-Date: 2013-11-11 07:43:49 Commandline: apt-get install --no-install-recommends catfish Start-Date: 2013-10-17 23:00:06 Commandline: apt-get install shimmer-themes Start-Date: 2013-10-17 23:01:52 Commandline: apt-get install --no-install-recommends gedit 

В Perl:

 $ perl -ne 'print $last,"$_\n" if /^Commandline/; $last=$_' foo.txt Start-Date: 2013-11-11 07:43:49 Commandline: apt-get install --no-install-recommends catfish Start-Date: 2013-10-17 23:00:06 Commandline: apt-get install shimmer-themes Start-Date: 2013-10-17 23:01:52 Commandline: apt-get install --no-install-recommends gedit 

Или, чтобы удалить пустые строки:

 $ perl -ne 'print $last,$_ if /^Commandline/; $last=$_' foo Start-Date: 2013-11-11 07:43:49 Commandline: apt-get install --no-install-recommends catfish Start-Date: 2013-10-17 23:00:06 Commandline: apt-get install shimmer-themes Start-Date: 2013-10-17 23:01:52 Commandline: apt-get install --no-install-recommends gedit 

Переключатель -n заставляет perl обрабатывать входной файл по строкам, сохраняя каждую строку в специальной переменной $_ . Сценарий выше выводит текущую строку ( $_ ) и предыдущую строку ( $last ), если текущий начинается с Commandline . Затем он сохраняет текущую строку как $last и переходит к следующей строке.

  • Хотите заменить только первое вхождение с sed
  • смещение пробелов, совпадающее с путаницей
  • Замена многострочных последовательных тегов одной строкой с использованием sed и игнорирование пробелов
  • замена специальных символов с помощью команды sed
  • Что делает sed -i '1d'?
  • Ошибка RE: операнд-оператор повторения недействителен
  • sed: как отключить автозапуск через файл сценария вместо использования ключа -n?
  • Удалите пространство между вложенными скобками
  • Как работает sed 's / / \ / g'
  • Найти все события в файле с sed
  • Как прекратить добавление дополнительных символов новой строки
  • Interesting Posts

    Разбор / манипуляция в awk

    Сценарий оболочки и добавление больших значений в проблему с ограниченным файлом

    Почему «/» имеет запись «..»?

    странный шум в некоторых программах gui

    Ubuntu 15.10 – Невозможно отключить демон с помощью Systemd

    Запуск скрипта каждые 30 минут с помощью crontab с использованием ROOT (Debian)

    Как мне сделать «Hello World», чтобы попробовать использовать cron

    Изменение разрешений на пользовательские файлы для автоматизации создания Apache VirtualHost

    APT – Как исправить установку пакета «самба»

    Как написать программу, которая может работать на компьютере без операционной системы?

    Различные результаты OS X / Linux с «find PATH -mount \ (-type f -o-type d \) -print0 | LC_ALL = C sort –zero-terminated> OUTPUT.txt "

    bash: Как я могу обнаружить, если предыдущая команда не удалась, а затем выйти изнутри функции?

    Сравнение 2 файлов со вторым файлом, содержащим подмножество данных из файла 1

    Разрешения для файлов для ядра изменились в OSX Yosmite, почему?

    Существует ли общий способ построения 32-битных проектов на 64-битной системе?

    Linux и Unix - лучшая ОС в мире.