sed '/../!d;a\ ' file
Isso serviria perto do mesmo propósito que o abaixo; ele excluiria qualquer linha que não contenha 2 ou mais caracteres e acrescentaria um espaço em branco a todos os demais.
Isso me dá um tipo de arquivo como o seu problema:
printf '12345|john|student\n|\n|\n|\n%.0b' 'seq 1 10' >|./file1.txt
Parece assim:
12345|john|student
|
|
|
Mas repetido 10 vezes.
Então isso:
sed -n '/[^|].*/s//&|\n/p' ./file1.txt
Me dá:
12345|john|student|
12345|john|student|
12345|john|student|
12345|john|student|
12345|john|student|
12345|john|student|
12345|john|student|
12345|john|student|
12345|john|student|
12345|john|student|
Desculpe, demorei um pouco para fazer isso direito; Eu preciso parar de escrever essas respostas no meu telefone ...