Ganti semua baris baru ke luar angkasa kecuali baris terakhir

38

Bagaimana saya bisa mengganti semua baris baru dengan spasi kecuali baris baru terakhir. Saya bisa mengganti semua baris baru ke ruang angkasa menggunakan trtetapi bagaimana saya bisa melakukannya dengan beberapa pengecualian?

Gilles 'SANGAT berhenti menjadi jahat'
sumber

Jawaban:

42

Anda bisa menggunakan 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
sumber
1
Keren! The -sdan -dpilihan tampak seperti dibuat untuk kasus ini.
mkc
10

Anda dapat menggunakan truntuk mengganti semua baris baru ke ruang dan meneruskan output ke seddan mengganti ruang terakhir kembali ke baris baru:

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

Re-mengimplementasikan ide vonbrand ini di Perl, asalkan file tersebut cukup kecil:

perl -p00e 's/\n(?!\Z)/ /g' your_file
Joseph R.
sumber
+1 karena metode ini berfungsi untuk penggantian dengan karakter multibyte (berbeda dengan tempel GNU)
myrdd
-1

Sesuatu seperti sed -e 's;\n\(.\); \1;'harus dilakukan ...

vonbrand
sumber
-1

Ini berhasil untuk saya.

tr '\n' ' ' < file_with_new_line   | sed 's/\ $//g' > file_with_space
Abhijit
sumber
Itu juga akan menghapus baris terakhir.
terdon
Saya rasa tidak, itu berfungsi dengan baik. Sudahkah Anda mencobanya ???
Abhijit
Ya saya punya. Sudahkah Anda? trPerintah Anda menggantikan semua baris baru dengan spasi dan sedperintah Anda menghilangkan spasi terakhir. Ini menghasilkan file tanpa baris terakhir dan karenanya bukan apa yang ditanyakan. Omong-omong, tidak ada int int menggunakan gdalam sedperintah. Karena Anda menggunakan $, itu hanya bisa cocok pada akhirnya, gtidak ada gunanya. Anda juga tidak perlu keluar dari ruang, `` tidak ada bedanya juga.
terdon