Reemplace todas las líneas nuevas al espacio excepto el último

38

¿Cómo puedo reemplazar todas las líneas nuevas con espacio excepto la última línea nueva? Puedo reemplazar toda la nueva línea al espacio usando, trpero ¿cómo puedo hacerlo con algunas excepciones?

Gilles 'SO- deja de ser malvado'
fuente

Respuestas:

42

Puedes 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
fuente
1
¡Guay! Las opciones -sy -dparecen estar hechas para este caso.
mkc
10

Puede usar trpara reemplazar todas las nuevas líneas al espacio y pasar la salida sedy reemplazar el último espacio a una nueva línea:

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

Vuelva a implementar la idea de vonbrand en Perl, siempre que el archivo sea lo suficientemente pequeño:

perl -p00e 's/\n(?!\Z)/ /g' your_file
Joseph R.
fuente
+1 porque este método funciona para reemplazos con caracteres multibyte (en oposición a GNU paste)
myrdd
-1

Algo como sed -e 's;\n\(.\); \1;'debería hacer ...

vonbrand
fuente
-1

Esto funcionó para mí.

tr '\n' ' ' < file_with_new_line   | sed 's/\ $//g' > file_with_space
Abhijit
fuente
Eso eliminará la última línea nueva también.
terdon
No lo creo, está funcionando bien. ¿Realmente lo has probado?
Abhijit
Sí tengo. ¿Tienes? Su trcomando reemplaza todas las líneas nuevas con espacios y su sedcomando elimina el último espacio. Esto da como resultado un archivo sin una nueva línea final y, por lo tanto, no es lo que la pregunta está pidiendo. Por cierto, no tiene sentido usarg en el sedcomando. Como estás usando $, solo puede coincidir al final, no gtiene sentido. Tampoco necesita escapar del espacio, el `` tampoco hace diferencia.
terdon