¿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.
sed
que ha mostrado sin un nombre de archivo actúa como un filtro y no procesa un archivo en su lugar )dos2unix
o algo así .Respuestas:
Re el comando que ha proporcionado:
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:
En realidad, puedes simplemente esto para un comando:
fuente
\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 banderased
para decirle que usara ERE en la parte superior de mi cabeza. Creo que no está-r
probado aquí. El,*
es tuyo y coincide con cero o más comas.g
que no es necesario en este caso, sólo es ter 1 final especificado por$
(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
fuente