sed uma linha para apagar qualquer linha que comece com um dígito

3

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.

    
por ixtmixilix 21.05.2011 / 02:43

3 respostas

8
sed -e '/^[0-9]/d' filename > filename.new

ou para modificar no lugar

sed -i -e '/^[0-9]/d' filename
    
por 21.05.2011 / 02:51
9

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 ).

    
por 21.05.2011 / 04:04
1
sed -e '/^[0-9].*$/d' oldfile > newfile
    
por 21.05.2011 / 02:55