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.