Satırdaki virgülleri sil


10

Sonunda virgül dizisini nasıl silebilirim:

a,b,c,d,,,,
1,2,3,,,,

Istenilen çıktı:

a,b,c,d
1,2,3

Bunu yapmaya çalıştı:

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

ama işe yaramıyor. Dosya başlangıçta bir Windows makinesinden geliyordu.


2
İşe yaramadığından emin misin? Hangi komutu verdin?
cuonglm

Pozitif. Olmadı.
user2980702

Tam komutunuzu verir sedmisiniz , lütfen ( dosya adı olmadan gösterdiğiniz bir filtre görevi görür ve bir dosyayı yerinde
işlemez

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

2
Dosyayı * nix'de kullanmanız gerekiyorsa ve dosyayı Windows'a geri kopyalamanız gerekmiyorsa, uzun vadede satır sonlarını CR / LF'den NL'ye dos2unixveya bunun gibi bir şeye dönüştürmek daha kolay olabilir . .
G-Man 'Monica'yı Eski

Yanıtlar:


13

Verdiğiniz komutu yeniden girin:

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

Bu, tüm arka virgüllerin kaldırılmasıyla '5628' ile eşleşen satırların çıktısını alır. Dosya güncellenmez test.csv.

Ancak, dosyanın bir Windows makinesinden geldiğini belirttiniz, bu nedenle satır sonları yalnızca NL yerine CR / NL'dir. Sonuç, satırın sonunda gizli bir CR olması ve bunun yerine bir komut satırına ihtiyacınız olması:

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

Aslında, bunu tek bir komutla yapabilirsiniz:

sed -n '/5628/s/,*\r*$//p' test.csv

Güncellemeyi yerinde yapmaya çalışmıyorum. Sadece virgül olmadan çıktı ihtiyaç
user2980702

Bu işe yaradı Çok teşekkür ederim. Bu nedenle, dosyanın sonunda satır başı (\ r * $) dönmeden önce birden çok virgül (, *) arıyoruz. Haklı mıyım?
user2980702

\r*(Unix / Linux dosyaları türetilen ile bu işin önemini korumaya devam edecektir) sıfır veya-daha CR karakterleri için izin verir. \r?Tek bir isteğe bağlı CR belirtmek için kullanmayı tercih ederim ama sedbaşımın üstündeki ERE'leri kullanmasını söylemek için bayrağı hatırlayamadım . Bence -rburada denenmemiş. Bu ,*sizindir ve sıfır veya daha fazla virgülle eşleşir.
roaima

gBu durumda gerekli değildir, ter sadece 1 uç tarafından belirtilen olduğu$
NeronLeVelu

2
sed -n '/5628/ s/,*\r*$//p' test.csv

(sadece sondaki komayı kaldırmayı isteyen OP değil) bu, bir borulama işleminden kaçınır, doğrudan filtreyi ve dönüşümü alır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.