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. -
d
informa 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