Hapus koma dalam antrian

10

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.

pengguna2980702
sumber
2
Apakah Anda yakin itu tidak berhasil? Apa perintah penuh yang Anda jalankan?
cuonglm
Positif. Tidak.
user2980702
Bisakah Anda memberikan perintah yang tepat, tolong ( sedAnda telah ditampilkan tanpa nama file bertindak sebagai filter dan tidak memproses file di tempat )
roaima
grep "5628" test.csv | sed 's /, * $ // g'
user2980702
2
Jika Anda perlu menggunakan file dalam * nix dan Anda tidak perlu menyalinnya kembali ke Windows, dalam jangka panjang mungkin akan lebih mudah untuk mengubah ujung baris dari CR / LF ke NL dengan dos2unixatau sesuatu seperti itu .
G-Man Mengatakan 'Reinstate Monica'

Jawaban:

13

Re perintah yang Anda berikan:

grep "5628" test.csv | sed 's/,*$//g'

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:

grep "5628" test.csv | sed 's/,*\r*$//'

Sebenarnya, Anda bisa cukup dengan satu perintah ini:

sed -n '/5628/s/,*\r*$//p' test.csv
roaima
sumber
Saya tidak mencoba melakukan pembaruan di tempat. Hanya perlu output tanpa koma
user2980702
Ini berhasil Terima kasih banyak. Jadi kami sedang mencari beberapa koma (, *) sebelum carriage return di akhir file (\ r * $). Apakah saya benar ?
user2980702
The \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 bendera seduntuk mengatakan untuk menggunakan ERE dari atas kepala saya. Saya pikir itu -rtetapi belum diuji di sini. Ini ,*milik Anda dan cocok dengan nol atau lebih banyak koma.
roaima
yang gtidak diperlukan dalam hal ini, ter hanya 1 akhir yang ditentukan oleh$
NeronLeVelu
2
sed -n '/5628/ s/,*\r*$//p' test.csv

(bukan OP yang hanya meminta untuk menghapus koma tertinggal) ini menghindari proses perpipaan, sed langsung mengambil filter dan konversi

NeronLeVelu
sumber