sed -e '/^[0-9]/d' filename > filename.new
ou para modificar no lugar
sed -i -e '/^[0-9]/d' filename
Finja que estou trabalhando com este arquivo.
O começo da primeira linha visível é obscurecido, então ignore isso. 43 é o começo da próxima linha, e essa linha seria deletada.
A próxima linha (que começa com 44 e termina com um período) será excluída.
A próxima linha (que consiste apenas em 424) também desapareceu.
A próxima linha (que consiste em '11. King and Hero ') também desapareceu.
A próxima linha permanece.
Eu usaria grep(1) para isso:
grep -v '^[0-9]' filename
^[0-9] corresponde a qualquer linha que comece com um dígito e -v exclui as linhas correspondentes, em vez de incluir. Você também pode usar a classe de caractere [:digit:] em vez de [0-9] .
Em vez de -v , você pode inverter o intervalo:
grep '^[^0-9]' filename
Isso corresponderá a qualquer linha que não comece com um dígito, mas não corresponderá a linhas em branco.
Com grep , sed e awk , minha regra geral é que, para correspondência e extração simples, use grep , para reescrita sem estado, use sed e, para modificações com informações de estado, use awk . É por isso que sugiro usar grep em vez de sed como você perguntou em sua pergunta (e outros já responderam por sed ).
sed -e '/^[0-9].*$/d' oldfile > newfile
Tags sed regular-expression