Apakah ada masalah dengan sed dan karakter baris baru?
Saya memiliki file test.txt dengan isi sebagai berikut
aaaaa
bbbbb
ccccc
ddddd
Berikut ini tidak bekerja:
sed -r -i 's/\n/,/g' test.txt
Saya tahu bahwa saya bisa menggunakan tr
untuk ini, tetapi pertanyaan saya adalah mengapa hal ini tidak mungkin dilakukan dengan sed.
Jika ini adalah efek samping dari pemrosesan file baris demi baris, saya akan tertarik mengapa hal ini terjadi. Saya pikir grep
menghapus baris baru. Apakah sed melakukan hal yang sama?
Dengan GNU sed
dan asalkan POSIXLY_CORRECT
tidak ada di lingkungan (untuk input baris tunggal):
sed -i ':a;N;$!ba;s/\n/,/g' test.txt
Dari https://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n:
:a
N
$!ba
($!
berarti tidak melakukannya pada baris terakhir (karena harus ada satu baris baru terakhir)).Dari situs web Oracle:
Utilitas sed bekerja dengan membaca file secara berurutan, baris demi baris, ke dalam memori. Kemudian melakukan semua tindakan yang ditentukan untuk baris tersebut dan menempatkan baris tersebut kembali ke memori untuk dibuang ke terminal dengan perubahan yang diminta. Setelah semua tindakan dilakukan pada baris yang satu ini, sed membaca baris berikutnya dari file dan mengulangi prosesnya sampai selesai dengan file tersebut.
Pada dasarnya ini berarti bahwa karena sed membaca baris demi baris, karakter newline tidak cocok.
Solusi dari https://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n adalah:
sed ':a;N;$!ba;s/\n/,/g'
atau, dalam versi portabel (tanpa ;
penggabungan setelah label tanda lompat)
sed -e ':a' -e 'N;$!ba' -e 's/\n/,/g'
Penjelasan tentang cara kerjanya disediakan pada halaman tersebut.