Substitua todas as novas linhas no espaço, exceto a última

38

Como posso substituir todas as novas linhas por espaço, exceto a última nova linha. Posso substituir toda a nova linha para o espaço usando, trmas como posso fazer isso com algumas exceções?

Gilles 'SO- parar de ser mau'
fonte

Respostas:

42

Você pode usar paste -s -d ' ' file.txt:

$ cat file.txt
one line
another line
third line
fourth line

$ paste -s -d ' ' file.txt 
one line another line third line fourth line
Grebneke
fonte
1
Legal! As opções -se -dparecem feitas para este caso.
Mkc 8/02
10

Você pode usar trpara substituir todas as novas linhas para o espaço e passar a saída sede substituir o último espaço de volta para uma nova linha:

tr '\n' ' ' < afile.txt | sed '$s/ $/\n/'
mkc
fonte
5

Re-implementar a idéia de vonbrand em Perl, desde que o arquivo é pequeno o suficiente:

perl -p00e 's/\n(?!\Z)/ /g' your_file
Joseph R.
fonte
Uma vez que este método funciona para substituições com caracteres de bytes múltiplos (em oposição a GNU cole)
myrdd
-1

Algo como sed -e 's;\n\(.\); \1;'deveria fazer ...

vonbrand
fonte
-1

Isso funcionou para mim.

tr '\n' ' ' < file_with_new_line   | sed 's/\ $//g' > file_with_space
Abhijit
fonte
Isso removerá a última nova linha também.
terdon
Acho que não, está funcionando bem. Você realmente tentou isso ???
Abhijit 01/03
Sim, eu tenho. Você já? Seu trcomando substitui todas as novas linhas por espaços e seu sedcomando remove o último espaço. Isso resulta em um arquivo sem uma nova linha final e, portanto, não é o que a pergunta está pedindo. A propósito, não faz sentido usarg em no sedcomando. Como você está usando $, ele pode corresponder apenas no final, o que gé inútil. Você também não precisa escapar do espaço, o `` também não faz diferença.
terdon