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'