Jak usunąć zestaw przecinków końcowych w bash:
a,b,c,d,,,,
1,2,3,,,,
Pożądane wyjście:
a,b,c,d
1,2,3
Próbowałem to zrobić:
grep "5628" test.csv | sed 's/,*$//g'
ale to nie działa. Plik pierwotnie pochodzi z komputera z systemem Windows.
sed
pokazane bez nazwy pliku działa jak filtr i nie przetwarza pliku na miejscu )dos2unix
czegoś takiego .Odpowiedzi:
Ponownie wprowadź podane polecenie:
Spowoduje to wyświetlenie wierszy pasujących do „5628” ze wszystkimi końcowymi przecinkami. Nie zaktualizuje pliku
test.csv
.Wskazałeś jednak, że plik pochodzi z komputera z systemem Windows, więc zakończenia linii to CR / NL zamiast tylko NL. W rezultacie na końcu linii znajduje się ukryty CR, a zamiast tego potrzebujesz wiersza polecenia:
W rzeczywistości możesz po prostu wykonać jedno polecenie:
źródło
\r*
Umożliwia znaków o zerowej lub więcej-Cr (tak będzie nadal współpracować z Unix / Linux pochodzi plików). Wolałbym użyć,\r?
aby wskazać pojedynczy opcjonalny CR, ale nie pamiętałem flagi,sed
aby powiedzieć jej, aby używała ERE z góry mojej głowy. Wydaje mi się, że jest-r
tu jeszcze niesprawdzony.,*
Należy do Ciebie i dopasowuje zero-lub-więcej przecinki.g
nie jest konieczne w tym przypadku jest tylko 1 ter koniec określony przez$
(nie OP, który prosi tylko o usunięcie śpiączki końcowej) pozwala to uniknąć procesu instalacji rurowej, sed bezpośrednio bierze filtr i konwersję
źródło