tutorial solo regulares regular probar numeros letras expresiones expresion especiales ejemplos direccion casa caracteres regex linux gnu

regex - solo - probar expresiones regulares



¿Qué es ''la biblioteca de expresiones regulares suministrada por[mi] sistema''? (3)

Es un parámetro de tiempo de compilación. El script ./configure de less conoce el with-regex=LIB .

Esta es una cita de README del paquete upstream:

--with-regex = lib

Specifies the regular expression library used by less for pattern matching. The default is "auto", which means the configure program finds a regular expression library automatically. Other values are: posix Use the POSIX-compatible regcomp. pcre Use the PCRE library. regcmp Use the regcmp library. re_comp Use the re_comp library. regcomp Use the V8-compatible regcomp. regcomp-local Use Henry Spencer''s V8-compatible regcomp (source is supplied with less).

Por lo que necesitarías saber cuánto menos fue ''./configurado''. He investigado esto en Debian / Ubuntu. Utilizan el POSIX regex lib.

Todavía estoy buscando una forma de detectarlo dinámicamente mediante un script ... :)

Actualización: lo único que he logrado hasta ahora fue detectar si menos usa expresiones regulares de PCRE o no. Si se configuró menos utilizando --with-regex=pcre , se vincula con la biblioteca compartida libpcre.so:

#!/bin/bash # ldd prints out the shared libraries a binary is linked to. # This can be used to check if less is linked against libpcre if ldd "$(which less)" | grep ''libpcre/.so'' ; then echo "less uses pcre regex syntax" else echo "less uses non pcre regex syntax" # ... more checks should follow. currently trying to find a way fi

La página del manual para la utilidad menos GNU dice lo siguiente sobre la búsqueda:

/pattern Search forward in the file for the N-th line containing the pattern. N defaults to 1. The pattern is a regular expression, as recognized by the regular expression library supplied by your system.

Uso menos en todo tipo de sistemas: mi computadora portátil personal de Ubuntu, mi servidor CentOS en la nube, bajo Cygwin en el trabajo, etc. Sigo queriendo hacer cosas como miradas negativas y otras cosas sofisticadas, pero no sé qué regex sintaxis a utilizar. ¿Cómo me entero?


La respuesta sugerida para observar la salida de less --version no abordó mi situación en Solaris 10: las dos primeras líneas dicen:

less 436 Copyright (C) 1984-2009 Mark Nudelman

No puedo ver una biblioteca de expresiones regulares obvia en la lista de dependencias dinámicas:

$ ldd /usr/bin/less libcurses.so.1 => /lib/libcurses.so.1 libc.so.1 => /lib/libc.so.1 libm.so.2 => /lib/libm.so.2 /lib/libm/libm_hwcap1.so.2 /platform/sun4v/lib/libc_psr.so.1

man libc indica que la biblioteca ofrece múltiples interfaces regex: regcmp , re_comp y regcomp .

Al ejecutar elfdump contra el binario, puedo ver referencias al símbolo regcomp :

$ elfdump /usr/bin/less | egrep -i ''posix|pcre|regcmp|re_comp|regcomp|regcomp-local'' [452] 0x0003d6a0 0x00000000 FUNC GLOB D 0 UNDEF regcomp [452] regcomp R_SPARC_JMP_SLOT 0x3d6a0 0 .rela.plt regcomp

Si este es un enlace a la función del compilador regex regex, entonces el texto README en la respuesta de @ hek2mgl sugiere que este binario less podría usar expresiones regulares POSIX (o expresiones regulares Spencer V8, ¿compilado en el binario?).

La página del regcomp(3C) para regcomp(3C) lee:

DESCRIPTION These functions interpret basic and extended regular expres- sions (described on the regex(5) manual page).

Experimentando con búsquedas en less , descubrí que el operador de repetición de expresiones regulares {...} funciona sin escapes de barra invertida. La página de regex(5) de regex(5) en mi sistema define esto como una sintaxis de Expresión Regular Extendida (ERE).

Por último, he encontrado appendix descriptions interesantes de las interfaces de varios motores de expresiones regulares, que se resumen a continuación:

Engine Interface ---------------- -------------------------------- GNU re_compile_pattern() and regex.h PCRE pcre_compile and pcre.h / pcre2_compile and pcre2.h POSIX regcomp() and regex.h Henry Spencer V8 regcomp() and regexp.h BSD re_comp() System V regcmp()


No sé si esto funciona en todos los casos (versiones anteriores / sistemas diferentes) pero pude encontrar esta información usando less --version :

less 458 (GNU regular expressions) Copyright (C) 1984-2012 Mark Nudelman less comes with NO WARRANTY, to the extent permitted by law. For information about the terms of redistribution, see the file named README in the less distribution. Homepage: http://www.greenwoodsoftware.com/less

Así que es la sintaxis de expresiones regulares de GNU ...

Y después de compilar una versión más reciente con --with-regex=pcre obtuve

less 481 (PCRE regular expressions) ...

Actualizar

Gracias a crw por comprobar. Esta solución parece ser específica de la versión . Después de compilar el código fuente disponible en el greenwoodsoftware (en Linux), descubrí que no funciona para las versiones 436 (lanzadas el 25 de julio de 2009) y anteriores. Comienza a funcionar al menos 451 (lanzado el 4 de septiembre de 2012) y más tarde. (Las versiones intermedias no estaban disponibles para descargar).