Tente:
$ sed 'H;1h;$!d;x; s/\n/,/g' out.txt
hi,my,name,is
Por padrão, o sed lê apenas uma linha por vez, processa e imprime. Como uma única linha nunca possui um caractere de nova linha, o comando s/\n/,/g
não faz nada. A solução, como acima, é ler o arquivo inteiro de uma só vez e, em seguida, fazer s/\n/,/g
.
Os comandos H;1h;$!d;x
leem o arquivo inteiro de uma só vez. É provavel
É mais simples pensar nisso como uma expressão idiomática. Se você realmente quer saber
os detalhes sangrentos:
-
H
- Anexa linha atual para manter espaço -
1h
- Se esta for a primeira linha, sobrescreva o espaço de espera com isso -
$!d
- Se esta não for a última linha, exclua o espaço do padrão e pule para a próxima linha. -
x
- Espaço de troca e padrão para colocar o arquivo inteiro em espaço padrão
Alternativa: awk
$ awk 'NR>1{printf ","} {printf "%s",$0} END{print""}' out.txt
hi,my,name,is
Ou:
$ awk '{printf "%s%s",(NR==1?"":","),$0} END{print""}' out.txt
hi,my,name,is