sed para insertar dos puntos en una dirección mac
Frecuentes
Visto 11,564 veces
5
Tengo una lista de direcciones mac en este formato:
412010000018
412010000026
412010000034
Quiero esta salida:
41:20:10:00:00:18
41:20:10:00:00:26
41:20:10:00:00:34
Intenté esto, pero no funcionó:
sed 's/([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})/\1:\2:\3:\4/g' mac_list
¿Cómo debería hacerlo?
5 Respuestas
7
Esto podría funcionar para usted (GNU sed):
sed 's/..\B/&:/g' file
Respondido el 12 de junio de 12 a las 13:06
5
Esto es lo que funcionó para mí
sed 's/\(..\)/\1:/g;s/:$//' file
Respondido 08 ago 14, 18:08
3
Tienes que usar el correcto sed
sintaxis:
\{I\}
matches exactly I sequences (I is a decimal integer;
for portability, keep it between 0 and 255 inclusive).
\(REGEXP\)
Groups the inner REGEXP as a whole, this is used for back references.
Aquí hay un comando de ejemplo que cubre los primeros 2 campos
sed 's/^\([0-9A-Fa-f]\{2\}\)\([0-9A-Fa-f]\{2\}\).*$/\1:\2:/'
El siguiente comando puede procesar una dirección MAC completa y es fácil de leer:
sed -e 's/^\([0-9A-Fa-f]\{2\}\)/\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1_/' \
-e 's/_\([0-9A-Fa-f]\{2\}\)/:\1/'
Siguiendo la idea de una solución perl publicada aquí por @Qtax con sustituciones globales, se puede obtener una solución más corta:
sed -e 's/\([0-9A-Fa-f]\{2\}\)/\1:/g' -e 's/\(.*\):$/\1/'
Respondido el 12 de junio de 12 a las 08:06
2
Ejemplo de Perl:
perl -pe 's/(\b|\G)[\da-f]{2}(?=[\da-f]{2})/$&:/ig' file
Si el archivo solo tiene direcciones MAC, podría simplificarse a:
perl -pe 's/\w{2}\B/$&:/g' file
Respondido el 12 de junio de 12 a las 08:06
1
If awk
es una solución aceptable:
awk 'BEGIN { FS= "" }
{ for (i=1; i<=length($0) ; i++) {
if (i % 2 == 0) { macaddr=macaddr $i ":" }
else { macaddr = macaddr $i }
}
print gensub(":$","","g",macaddr)
macaddr=""
}' INPUTFILE
lo hace bien. Aquí puedes verlo en acción..
Respondido el 12 de junio de 12 a las 08:06
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas regex sed or haz tu propia pregunta.
Una dirección mac está en formato hexadecimal y no solo numérico. - Yohann
Una vez que empiezo a trabajar con el formato numérico básico, también puedo agregar expresiones regulares alfabéticas: cppcoder