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

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

*252 253 254 255 (blank line here) 

ИЛИ

 *261 265 (blank line here) 

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

  • Вербальное считывание регулярных выражений sed в квадратных скобках, звездочка вне скобок
  • Как эта команда sed работает?
  • Добавьте ведущие нули, пока все строки перед запятой не состоят из девяти символов и затем вставьте символ каждые три цифры, используя sed
  • Что делает опция x для sed действительно при обмене данными между удержанием и буфером шаблонов?
  • Удаление второго и последнего символов в каждой строке - с помощью sed
  • Confused by sed output при использовании N. Кто-нибудь может объяснить эти результаты?
  • sed: несколько-или цикл?
  • Как удалить определенную строку и следующую пустую строку с помощью GNU sed?
  • 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 
    Interesting Posts
    Linux и Unix - лучшая ОС в мире.