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.


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

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ę

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.