remove apenas a primeira linha em branco sed

3

há perguntas semelhantes aqui, mas nenhuma corresponde exatamente ao meu problema.

Como faço para remover apenas a primeira linha em branco de um arquivo usando sed?

Digamos que eu tenha

a

b

c

E eu quero

a
b

c

Como saída.

    
por blue 11.05.2013 / 14:12

2 respostas

4

Veja o sed FAQ aqui :

$ sed '0,/^$/{//d}' lines
a
b

c

d

Note que somente remove linhas verdadeiramente vazias, se você quiser considerar linhas com espaço em branco que você usaria

$ sed '0,/^[[:space:]]*$/{//d}' lines

em vez disso.

    
por 11.05.2013 / 15:38
2

Você pode usar sed para ler até a primeira linha em branco e, em seguida, usar cat para ler o restante, o que seria mais eficiente para arquivos grandes:

{ sed -n '/./!q;p'; cat; } < the-file

Ele só funciona com arquivos regulares (não com pipes porque sed lê dados por blocos e não pode buscar de volta para a linha depois daquele em que q foi chamado se a entrada não for procurada). Conforme observado por @ peterph, com GNU sed versão 4.2.2 e acima, você pode adicionar o -u flag que faz com que o GNU sed leia sua entrada um byte de cada vez (e imprima uma linha por vez) e elimina o problema com pipes (embora degradando o desempenho).

    
por 11.05.2013 / 16:11

Tags