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

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

*252 253 254 255 (blank line here) 

ИЛИ

 *261 265 (blank line here) 

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

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 
  • Sed: заменить одну / две цифры (-ы)
  • sed - найти и заменить текст, содержащий "/"
  • замена специальных символов с помощью команды sed
  • Как выбрать 30 файлов и сделать кучу sed команд на них
  • как изменить полную строку с помощью опции sed c
  • sed, как заменить стандартный ввод
  • Извлечение содержимого между тегами
  • Замените содержимое группы захвата регулярного выражения, используя sed
  • sed - удалить последнее вхождение строки (запятой) в файл?
  • Проблема с sed
  • Sed линия перемещения от n ° 40 до 39 позиция
  • Извлечение регулярного выражения, совпадающего с 'sed' без печати окружающих символов
  • Linux и Unix - лучшая ОС в мире.