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.


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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.