Bagaimana cara menghapus pemisah koma terakhir dari file di Linux?
Contoh file:
"is_supported_kafka_ranger" : "true",
"kafka_log_dir" : "/var/log/kafka",
"kafka_pid_dir" : "/var/run/kafka",
"kafka_user" : "kafka",
"kafka_user_nofile_limit" : "128000",
"kafka_user_nproc_limit" : "65536",
hasil yang diharapkan:
"is_supported_kafka_ranger" : "true",
"kafka_log_dir" : "/var/log/kafka",
"kafka_pid_dir" : "/var/run/kafka",
"kafka_user" : "kafka",
"kafka_user_nofile_limit" : "128000",
"kafka_user_nproc_limit" : "65536"
text-processing
awk
sed
perl
yael
sumber
sumber
Jawaban:
Menggunakan GNU
sed
:Artinya, pada baris terakhir (
$
) gantikan (s
) koma di akhir baris (,$
) dengan tidak ada.Perubahan akan dilakukan di tempat karena
-i
bendera.Dengan standar
sed
:Catatan: Seseorang menyarankan suntingan untuk mengubah "pada baris terakhir" menjadi "terakhir pada baris" (atau yang serupa). Ini salah. Ketika
$
digunakan untuk menentukan alamat (baris tempat menerapkan perintah pengeditan), maka itu merujuk ke baris terakhir dari aliran atau file. Ini berbeda dengan menggunakan$
dalam ekspresi reguler.sumber
Untuk pengeditan di tempat yang dapat Anda gunakan
ed
- mudah, ini mengatur posisi ke baris terakhir secara default pada pembukaan sehingga Anda tidak perlu membahas baris terakhir secara eksplisit:Atau, sebagai one-liner
sumber
printf
seperti ini:ed -s file <<< $'s/,$//\nwq\n'
(kata kunci untuk pencarian di manual bash adalah "di sini string").Secara umum, saya mungkin akan pergi dengan
sed
solusi langsung . Namun, jika file input Anda besar, Anda mungkin menginginkan solusi yang tidak meluangkan waktu untuk membaca seluruh file hanya untuk mengedit beberapa byte terakhir.Jika Anda 100% yakin file input Anda diakhiri dengan koma diikuti oleh baris baru, Anda dapat menggunakan
truncate
untuk memotong dua karakter terakhir ini, dan kemudian menambahkan kembali baris baru akhir:Ini mengasumsikan sebuah distro yang menyertakan GNU truncate atau yang setara.
@ StéphaneChazelas menunjukkan bahwa GNU
truncate
sekarang mendukungtruncate -s -2 file
untuk mempersingkat file dengan dua byte ; jika Anda memiliki versi ini, yang di atas menyederhanakan untuk:sumber
truncate
truncate
. OP menjelaskan solusinya dimulai dengan: "jika file input Anda besar" ... maka komentar saya.truncate
sekarang mendukungtruncate -s -2 file
untuk mempersingkat file dengan dua byte. Anda ingin menggunakanstat -L
sebagai untuk symlink, Anda ingin ukuran target symlink (atau hanyasize=$(wc -c < file)
).