Eliminar comas finales en línea

10

¿Cómo elimino un conjunto de comas finales en bash?

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

Salida deseada:

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

Intenté hacer esto:

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

Pero no funciona. El archivo vino originalmente de una máquina con Windows.

usuario2980702
fuente
2
¿Estás seguro de que no funcionó? ¿Qué comando completo ejecutaste?
Cuonglm
Positivo. No lo hizo.
user2980702
Puede proporcionar su comando exacto, por favor (el sedque ha mostrado sin un nombre de archivo actúa como un filtro y no procesa un archivo en su lugar )
roaima
grep "5628" test.csv | sed 's /, * $ // g'
user2980702
2
Si necesita usar el archivo en * nix y no necesita poder volver a copiarlo en Windows, a la larga podría ser más fácil convertir las terminaciones de línea de CR / LF a NL dos2unixo algo así .
G-Man dice 'reinstalar a Monica' el

Respuestas:

13

Re el comando que ha proporcionado:

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

Esto generará líneas que coincidan con '5628' con todas las comas finales eliminadas. No actualizará el archivo test.csv.

Sin embargo, indicó que el archivo provenía de una máquina Windows, por lo que los finales de línea son CR / NL en lugar de solo NL. El resultado es que hay un CR oculto al final de la línea, y en su lugar necesita una línea de comando:

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

En realidad, puedes simplemente esto para un comando:

sed -n '/5628/s/,*\r*$//p' test.csv
roaima
fuente
No estoy tratando de hacer una actualización en el lugar. Solo necesito la salida sin comas
user2980702
Esto funcionó Muchas gracias. Por lo tanto, estamos buscando varias comas (, *) antes del retorno de carro al final del archivo (\ r * $). Estoy en lo cierto?
user2980702
El \r*permite caracteres de cero o más CR (por lo que continuará el trabajo con Unix / Linux archivos deriva). Preferiría usar \r?para indicar un solo CR opcional, pero no podía recordar la bandera sedpara decirle que usara ERE en la parte superior de mi cabeza. Creo que no está -rprobado aquí. El ,*es tuyo y coincide con cero o más comas.
roaima
el gque no es necesario en este caso, sólo es ter 1 final especificado por$
NeronLeVelu
2
sed -n '/5628/ s/,*\r*$//p' test.csv

(no el OP que solo pide eliminar el coma final) para evitar un proceso de tubería, se toma directamente el filtro y la conversión

NeronLeVelu
fuente