Tidak perlu menempatkan label di :aluar instruksi utama, begitu juga -eopsi yang diperlukan; akhirnya, /$/ini berlebihan (setiap baris memiliki karakter EOL).
Memperbaiki jawaban lain, satu mendapat
sed -i ':a; N; s/\n/ /; ta' file
Yang lebih jelas jika dituliskan sebagai berikut,
sed -i ':a
N
s/\n/ /
ta' file
Perintahnya bekerja sebagai berikut:
N menambahkan baris berikutnya ke ruang pola (multiline), yang sudah berisi baris saat ini;
s/\n/ /mengganti karakter baris baru yang \ndihasilkan oleh Ndengan spasi ;
tapergi ke baris skrip mengikuti label :a selama substitusi pada langkah 2 berhasil , yaitu jika substitusi terjadi, eksekusi melompat ke langkah 1 tanpa "memukul" akhir skrip, yaitu tanpa membaca baris input lain.
Perhatikan yang berikut ini;
sedmembaca baris file input satu per satu secara berurutan, mulai dari baris 1 ;
:a hanyalah sebuah label, bukan perintah yang harus dieksekusi;
N pada prinsipnya dieksekusi pada baris apa pun, tetapi
s/\n/ /(pada prinsipnya dieksekusi pada baris apa pun) berhasil pada baris apa pun tetapi yang terakhir , jadi
tamembuat akhir skrip dapat dijangkau hanya ketika baris input terakhir dibaca (satu-satunya baris yang sgagal), jadi
- tidak ada baris input lebih lanjut dibaca ke dalam ruang pola setelah yang pertama dibaca ke dalamnya, kecuali yang terakhir dibaca, tetapi kemudian tidak ada baris lebih lanjut untuk dibaca, dan yang implisit
p perintah dieksekusi.
Jadi skrip pada dasarnya membaca di baris pertama input dan terus menambahkan baris berikut satu per satu, setiap kali mengganti baris baru dengan spasi; setelah baris terakhir ditambahkan (dan \ndiubah dalam spasi), Ntidak dapat menambahkan baris apa pun, sgagal, tadilewati, akhir skrip tercapai, dan ppernyataan bidak tersirat dieksekusi pada ruang pola 1 baris looong saat ini .
The -ipilihan pengganti file input filedengan ruang pola 1-line secara keseluruhan.