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.


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.