Elimina le virgole finali in linea


10

Come cancello una serie di virgole finali in bash:

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

Uscita desiderata:

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

Ho provato a fare questo:

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

ma non funziona. Il file originariamente proveniva da un computer Windows.


2
Sei sicuro che non abbia funzionato? Quale comando completo hai eseguito?
— cuonglm,

Positivo. No
— user2980702

Puoi fornire il tuo comando esatto, per favore (quello sedche hai mostrato senza un nome di file funge da filtro e non elabora un file sul posto )
— roaima

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

2
Se devi usare il file in * nix e non devi essere in grado di copiarlo di nuovo su Windows, a lungo termine potrebbe essere più semplice convertire le terminazioni di linea da CR / LF in NL con dos2unixo qualcosa del genere .
— G-Man dice "Ripristina Monica" il

Risposte:


13

Per quanto riguarda il comando che hai fornito:

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

Ciò genererà linee corrispondenti a '5628' con tutte le virgole finali rimosse. Non aggiornerà il file test.csv.

Tuttavia, hai indicato che il file proviene da un computer Windows, quindi le terminazioni di riga sono CR / NL anziché solo NL. Il risultato è che c'è un CR nascosto alla fine della riga, e invece è necessaria una riga di comando questa:

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

In realtà, puoi semplicemente questo per un comando:

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

Non sto cercando di eseguire l'aggiornamento sul posto. Ho solo bisogno dell'output senza virgole
— user2980702

Questo ha funzionato Grazie mille. Quindi stiamo cercando più virgole (, *) prima del ritorno a capo alla fine del file (\ r * $). Ho ragione ?
— user2980702

Il \r*permette per i caratteri zero o più-CR (in modo che continuerà a lavorare con Unix / Linux derivata file). Preferirei usare \r?per indicare un singolo CR opzionale ma non riuscivo a ricordare la bandiera sedper dirgli di usare ERE dalla parte superiore della mia testa. Penso che non sia stato -rtestato qui. Il ,*che è tuo e partite zero o-più virgole.
— roaima,

il gnon è necessario in questo caso, ter solo 1 end specificato$
— NeronLeVelu

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

(non l'OP che chiede solo di rimuovere il coma finale) questo evita un processo di tubazioni, sed prendendo direttamente il filtro e la conversione

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.