
Mi texto original es
11 2 CDTZ - b00264ab
36 37 CDTB - c2330001
Quiero que el texto de salida aparezca como
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
Tengo que agregar dos puntos después de cada 2 caracteres para la cadena que sigue al guión.
¿Existe algún comando de procesamiento de texto común al que pueda indicarle?
- Toda la cadena antes (e incluyendo) del guión debe estar intacta.
- Inserte dos puntos después de cada 2 caracteres que siguen al guión.
En general, tengo que procesar el texto antes y después de un patrón (guion aquí) de manera diferente.
Mis esfuerzos hasta ahora:
- Tengo conocimientos básicos de
sed
yawk
. - Si hubiera una manera de hacerlo
sed
dentro de an,awk
entonces establecería-
(guión) como separador de campoawk
y lo haríased 's/../&:/g;s/:$//'
,$2
luego imprimiría toda la línea usandoprint $0
.
Respuesta1
Prueba esto,
awk -v OFS='\t' '{gsub(/../,"&:",$NF); sub(/:$/,"",$NF);}1' file
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01
gsub(/../,"&:",$NF)
agregará un final:
a cada pareja o personaje.sub(/:$/,"",$NF)
eliminará lo no deseado:
al final del último campo agregado por el anteriorgsub
Respuesta2
Suponiendo que el número hexadecimal al final sea siempre de ocho caracteres:
$ sed 's/\(..\)\(..\)\(..\)\(..\)$/\1:\2:\3:\4/' file
11 2 CDTZ - b0:02:64:ab
36 37 CDTB - c2:33:00:01