[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: