Bagaimana cara saya menghapus set tanda koma di bash:
a,b,c,d,,,,
1,2,3,,,,
Output yang Diinginkan:
a,b,c,d
1,2,3
Sudah mencoba melakukan ini:
grep "5628" test.csv | sed 's/,*$//g'
tetapi tidak berhasil. File aslinya berasal dari mesin Windows.
sed
Anda telah ditampilkan tanpa nama file bertindak sebagai filter dan tidak memproses file di tempat )dos2unix
atau sesuatu seperti itu .Jawaban:
Re perintah yang Anda berikan:
Ini akan menampilkan baris yang cocok dengan '5628' dengan semua koma trailing dihapus. Itu tidak akan memperbarui file
test.csv
.Namun, Anda mengindikasikan bahwa file tersebut berasal dari mesin Windows, jadi ujung barisnya adalah CR / NL, bukan hanya NL. Hasilnya adalah bahwa ada CR tersembunyi di akhir baris, dan Anda perlu baris perintah ini sebagai gantinya:
Sebenarnya, Anda bisa cukup dengan satu perintah ini:
sumber
\r*
memungkinkan untuk karakter nol-atau-lebih CR (sehingga akan terus bekerja dengan Unix / Linux berasal file). Saya lebih suka menggunakan\r?
untuk menunjukkan CR opsional tunggal tetapi saya tidak dapat mengingat benderased
untuk mengatakan untuk menggunakan ERE dari atas kepala saya. Saya pikir itu-r
tetapi belum diuji di sini. Ini,*
milik Anda dan cocok dengan nol atau lebih banyak koma.g
tidak diperlukan dalam hal ini, ter hanya 1 akhir yang ditentukan oleh$
(bukan OP yang hanya meminta untuk menghapus koma tertinggal) ini menghindari proses perpipaan, sed langsung mengambil filter dan konversi
sumber