Чтобы удалить из строки, содержащей *
, до следующей пустой строки, используйте:
sed '/[*]/,/^$/d' filename
Примечания:
Поскольку *
является символом, активным регулярным выражением, и нам нужно только чтобы соответствовать литералу *
, нам нужно экранировать *
. Это можно сделать как \ *
или, как показано выше, [*]
.
Чтобы сопоставить пустую строку, нам нужна строка без символов между ее началом, обозначенным ^
, и концом, обозначенным $
. Таким образом, ^ $
соответствует пустой строке.
/ [*] /, / ^ $ /
- это диапазон: он соответствует группе строк, которые начинаются со строки, содержащей *
, и заканчиваются пустой строкой.
d
указывает sed удалить любую строку в диапазоне.
Вышеупомянутый вывод выводится на стандартный вывод. Чтобы изменить файл на месте, используйте:
sed -i.bak '/[*]/,/^$/d' filename
Рассмотрим этот пример файла:
$ cat filename
*252
253
254
255
OR
*261
265
end
Это дает:
$ sed '/[*]/,/^$/d' filename
OR
end