Удалить неизвестное количество строк от * до пустой строки

Я использую этот форум, поэтому я только что присоединился! Я видел подобные вопросы, но до сих пор ничего не работало (в основном с использованием sed). Я хочу найти каждый экземпляр звездочки (*) в файле и удалить его и все после него до тех пор, пока не будет достигнута пустая строка. Например:

*252 253 254 255 (blank line here) 

ИЛИ

 *261 265 (blank line here) 

Каждый блок данных будет меняться по длине. Затем я хочу, чтобы выход перешел в новый файл. Есть идеи?

  • Добавление файла текста с помощью Sed
  • Вставьте одинарные кавычки в текстовый файл для использования в качестве SQL-запроса, который следует за open-parens, используя sed
  • Как сопоставить соответствие шаблону и остановить его после последнего совпадения
  • Как отредактировать следующую строку после шаблона с помощью sed?
  • Как прекратить добавление дополнительных символов новой строки
  • Sed - Как я могу вставить строку после определенной строки И какой-то символ?
  • Совпадение шаблонов и grep вместе
  • Сед работает с двумя линиями
  • One Solution collect form web for “Удалить неизвестное количество строк от * до пустой строки”

    Чтобы удалить из строки, содержащей * следующую пустую строку, используйте:

     sed '/[*]/,/^$/d' filename 

    Заметки:

    1. Поскольку * является активным по регулярному выражению, и мы хотим только сопоставить литерал * , нам нужно избежать * . Это можно сделать как \* или, как показано выше, [*] .

    2. Чтобы сопоставить пустую строку, нам нужна строка без символов между ее началом, обозначенная символом ^ , и ее конец, обозначим $ . Таким образом, ^$ соответствует пустой строке.

    3. /[*]/,/^$/ – диапазон: он соответствует группе строк, начинающейся с строки, содержащей * и заканчивается пустой строкой.

    4. d сообщает sed, чтобы удалить любую строку в диапазоне.

    Вышеприведенный результат выводит на stdout. Чтобы изменить файл на месте, используйте:

     sed -i.bak '/[*]/,/^$/d' filename 

    пример

    Рассмотрим этот образец файла:

     $ cat filename *252 253 254 255 OR *261 265 end 

    Это дает:

     $ sed '/[*]/,/^$/d' filename OR end 
    Linux и Unix - лучшая ОС в мире.