O utilitário sed é orientado pela linha. Uma linha é lida e colocada no espaço padrão (o espaço padrão não contém um \ n). As ações sed são aplicadas ao espaço padrão e a linha é então escrita, com um \ n anexado. É por isso que não está fazendo o que você espera.
Se você quiser remover todas as novas linhas em um arquivo, poderá fazer isso
sed ':a;N;$!ba;s/\n//g' file
Isso efetivamente percorre as linhas de leitura de arquivo e as anexa ao espaço de padrão até que a última linha seja alcançada quando todo o espaço de padrão é usado para remover os \ ns.
- : a cria um marcador.
- N lê a próxima linha no espaço paterno
- $! se não a última linha ba ramifica para um
- s // n // g substitui todas as / g ocorrências de \ n com nada.
Dependendo do tamanho do arquivo, isso pode não funcionar, pois pode haver limites para o tamanho do espaço do padrão. Geralmente, é mais portável usar tr para fazer isso
tr -d '\n' <file