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

Una de regex: imprimir primera ocurrencia



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?

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á.

Muchas gracias de antemano.

-- 
   e non l'arbitrio de femina lieve,
che sempre inchina a quel che men far deve.
                  --- Ludovico Ariosto ---


Reply to: