Para excluir de uma linha que contém * para a próxima linha vazia, use:
sed '/[*]/,/^$/d' filename
Notas:
-
Como
*é um caractere regex ativo e queremos corresponder apenas a um literal*, precisamos escapar do*. Isso pode ser feito como\*ou, como mostrado acima,[*]. -
Para corresponder a uma linha vazia, precisamos de uma linha sem caracteres entre o início, denotada
^e seu final, denotada$. Assim,^$corresponde a uma linha vazia. -
/[*]/,/^$/é um intervalo: corresponde a um grupo de linhas que começam com uma linha que contém*e terminam com uma linha vazia. -
dinforma ao sed para excluir qualquer linha no intervalo.
O acima produz saída para stdout. Para alterar um arquivo, use:
sed -i.bak '/[*]/,/^$/d' filename
Exemplo
Considere este arquivo de amostra:
$ cat filename
*252
253
254
255
OR
*261
265
end
Isso produz:
$ sed '/[*]/,/^$/d' filename
OR
end