Re: Una de regex: imprimir primera ocurrencia
El Fri, 13 Mar 2015 17:20:01 +0100, José Miguel (sio2) escribió:
> Un saludo a la lista:
>
> Supongamos que tenemos una cadena (de una sóla línea) en la que se
> pueden encontrar muchas direcciones mac, pero me interesa imprimir sólo
> la primera de ellas. ¿Cuál creéis es la forma más eficiente de hacerlo?
Puedes "medir" lo que tarda la instrucción con "time".
> Se me ocurren varias, pero no sé muy bien cuál usar. Por ejemplo, esta
> me parece poco eficiente:
>
> $ echo $LINEA | grep -oP '(?:[\da-f]{1,2}:){5}[\da-f]{1,2}' | head -1
>
> Porque implica revisar toda la cadena, extraer todas las MAC y luego
> quedarse con la primera que se encontró. Además se llama a dos comandos
> independientes: grep y head.
>
> Esta:
>
> $ perl -e '"'"$LINEA"'" =~ /((?:[\da-f]{1,2}:){5}[\da-f]{1,2})/ ; print
> "$1"'
>
> usa perl, pero no sé si perl será pesado de cargar, ni tampoco sé muy
> bien cómo actua: si deja de analizar la línea al encontrar la ocurrencia
> o no si lo hace. Imagino que a poco que esté bien pensado parará.
Yo me decantaría por grep, está integrado en bash, debería ir más rápido
que cualquier otro comando externo aunque dependerá del tipo y cantidad
de datos a buscar/filtrar por lo que nada mejor que hacer pruebas con los
dos.
Por aquí comentan algo parecido:
Grep Regex for Mac Address
http://stackoverflow.com/questions/10318021/grep-regex-for-mac-address
Saludos,
--
Camaleón
Reply to: