Utilice el comando sed para reemplazar, que aparece entre los números

Utilice el comando sed para reemplazar, que aparece entre los números

Tengo un archivo CSV donde los datos están en el siguiente formato

|001|,|abc,def|,123456,789,|aaa|,|bbb|,444,555,666

Quiero reemplazar solo aquellos "," que aparecen entre números con algún otro carácter como SOH o $ o *

other "," que aparece en la línea no debería ser reemplazado, es decir, para decir que deseo tener el siguiente resultado

|001|,|abc,def|,123456*789,|aaa|,|bbb|,444*555*666

¿Alguien puede ayudarme con el patrón del comando sed para obtener el resultado deseado anteriormente?

Respuesta1

Prueba esto

sed 's/\([0-9]\),\(-\?[0-9]\)/\1\*\2/g'

La primera sección coincide con un dígito seguido de una coma seguida de un dígito o un -. La siguiente sección simplemente regurgita el primer dígito, el carácter de reemplazo y luego el último dígito.

Esto detectará cualquier patrón como "#,#" o "#,-#", incluidos algunos que quizás no sean deseados (por ejemplo, "abc123,-def" --> "abc123*-def"). Solucionar este problema requiere más conocimiento del flujo de entrada. (ver los comentarios para más detalles.)

Respuesta2

Lo siguiente parece funcionar:

sed 's/\([0-9]\),\([-0-9]\)/\1\*\2/g'

información relacionada