Usuń końcowe przecinki w linii

10

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.

użytkownik2980702
źródło
2
Jesteś pewien, że to nie zadziałało? Jakie pełne polecenie uruchomiłeś?
cuonglm,
Pozytywny. Nie udało się.
user2980702,
Czy możesz podać dokładne polecenie ( sedpokazane bez nazwy pliku działa jak filtr i nie przetwarza pliku na miejscu )
roaima
grep "5628" test.csv | sed 's /, * $ // g'
user2980702
2
Jeśli potrzebujesz użyć pliku w * nix i nie musisz mieć możliwości skopiowania go z powrotem do systemu Windows, na dłuższą metę może być łatwiej przekonwertować zakończenia linii z CR / LF na NL za pomocą dos2unixczegoś takiego .
G-Man mówi „Przywróć Monikę”

Odpowiedzi:

13

Ponownie wprowadź podane polecenie:

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

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:

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

W rzeczywistości możesz po prostu wykonać jedno polecenie:

sed -n '/5628/s/,*\r*$//p' test.csv
roaima
źródło
Nie próbuję robić aktualizacji w miejscu. Potrzebuję tylko danych wyjściowych bez przecinków
2980702
To działało. Dziękuję bardzo. Szukamy wielu przecinków (, *) przed powrotem karetki na końcu pliku (\ r * $). Czy mam rację ?
user2980702,
\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, sedaby powiedzieć jej, aby używała ERE z góry mojej głowy. Wydaje mi się, że jest -rtu jeszcze niesprawdzony. ,*Należy do Ciebie i dopasowuje zero-lub-więcej przecinki.
roaima,
gnie jest konieczne w tym przypadku jest tylko 1 ter koniec określony przez$
NeronLeVelu
2
sed -n '/5628/ s/,*\r*$//p' test.csv

(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ę

NeronLeVelu
źródło