Izinkan saya menjelaskan tentang karakter baris baru:
$ echo Hello > file1 ; cat file1
Hello
$ echo -n Hello > file2 ; cat file2
Hello$
Di sini Anda dapat melihat yang file1
memiliki karakter baris baru di akhir sedangkan yang file2
belum.
Sekarang misalkan saya punya satu file
:
$ cat file
Hello
Welcome to
Unix
$
Dan saya ingin menambahkan and Linux
di akhir file, kemudian echo " and Linux" >> file
akan ditambahkan ke baris baru. Tapi saya ingin baris terakhir sebagaiUnix and Linux
Jadi, Untuk mengatasi ini, saya ingin menghapus karakter baris baru di akhir file. Karena itu Bagaimana cara menghapus karakter baris baru di akhir file?
sed '$s/$/ and linux/'
Jawaban:
Jika semua yang ingin Anda lakukan adalah menambahkan teks ke baris terakhir, sangat mudah dengan sed. Ganti
$
(pencocokan pola di akhir baris) dengan teks yang ingin Anda tambahkan, hanya pada baris dalam rentang$
(yang berarti baris terakhir).yang di Linux dapat disingkat
Jika Anda ingin menghapus byte terakhir dalam sebuah file, Linux (lebih tepatnya GNU coreutils) menawarkan
truncate
perintah, yang membuatnya sangat mudah.Cara POSIX untuk melakukannya adalah dengan
dd
. Pertama-tama tentukan panjang file, kemudian potong menjadi kurang satu byte.Perhatikan bahwa keduanya tanpa syarat memotong byte terakhir file. Anda mungkin ingin memeriksa apakah itu adalah baris baru terlebih dahulu:
sumber
perl -pi -e 'chomp if eof' myfile
. Dibandingkan dengantruncate
ataudd
tidak akan meninggalkan Anda dengan file yang rusak jikamyfile
sebenarnya tidak ada baris baru.Meskipun demikian, Anda dapat menghapus karakter baris baru dari baris dengan
tr -d '\n'
:Anda dapat menghapus karakter baris baru di akhir file menggunakan cara mudah berikut:
head -c -1 file
Dari
man head
:truncate -s -1 file
dari
man truncate
:sumber
head -c -1 file | tee file
aman? Tidak akantee
memotong file sebelum memulai?tee
hanya perlu membuka file, sedangkanhead
harus membaca dan menulis isinya,tee
dalam praktiknya akan memenangkan perlombaan kecuali kadang-kadang untuk file yang sangat kecil.Anda dapat mencapai ini dengan perl sebagai:
Dibandingkan
truncate
ataudd
ini tidak akan meninggalkan Anda dengan file yang rusak jikamyfile
sebenarnya tidak ada baris baru.(jawabannya dibangun dari komentar , dan berdasarkan jawaban ini )
sumber
Inilah satu cara dengan
sed
- pada baris terakhir ($
) file, cari dan ganti apa saja (.*
) dengan "apa pun yang Anda cocokkan" diikuti oleh "dan Linux":Solusi yang bahkan lebih sederhana, milik Ishak , adalah:
Ini menggantikan end-of-line (simbolis) dengan teks yang diberikan.
sumber