¿Cuál es el propósito real de la opción -X de GNU grep y por qué no está documentada?

58

Al leer esta pregunta , descubrí que GNU greptiene una -Xopción que espera un argumento. Curiosamente, no se menciona ni en la página del manual ni en la página de información.

Mirando el código fuente, hay ese comentario justo en el medio de la --helpsalida :

/* -X is deliberately undocumented.  */

Mirando más, parece que la -X matcheropción fija el motor utilizado para la expresión regular , matchersiendo uno de grep , egrep, fgrep, awk, gawk, posixawky perl(en la versión 2.25).

Algunos de esos valores son estrictamente idénticas a las opciones existentes (es decir grep -G, grep -E, grep -Fy grep -P). Por otro lado, las tres awkvariantes no tienen opciones correspondientes.

¿Alguien sabe cuál es el propósito real de esta opción, especialmente con uno de los awkmotores regexp? ¿Alguien puede decirme por qué no está documentado a propósito?

xhienne
fuente
66
Interesante descubrimiento! Sospecho que el propósito de dejarlo sin documentar es para que puedan eliminarlo de versiones futuras a voluntad y sin previo aviso. Otro ejemplo de una opción no documentada de GNU es -Epara GNU sed que proporciona compatibilidad con BSD sed. (Espero -Edocumentarme si POSIX lo adopta formalmente y lo elimina si no lo hace.)
John1024
3
Estoy de acuerdo con @ John1024, aunque la única persona que puede responder definitivamente es Stepan Kasal, quien, el 7 de febrero de 2005, documentó que -Xestá deliberadamente indocumentado. (Su dirección de correo electrónico está en el registro de cambios si desea preguntarle).
Comodín el
3
Intenté rastrear esto a través de la historia de git, pero resultó que se agregó antes del primer git commit de grep (estuvo presente en 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 del martes 3 de noviembre 21:38:52 1998). Presumiblemente importaron el VCS anterior en git, ya que obviamente es anterior a git.
derobert
1
También en grep 2.0, que es el más antiguo que se encuentra en ftp.gnu.org/gnu/grep/?C=M;O=A
derobert
3
... pero no en 1.6 que encontré en oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/src/tar/… (nota: no he hecho ningún esfuerzo para verificar la autenticidad de ese código) parece que data de algún lugar entre 1.6 (1992) y 2.0 (1993)
derobert

Respuestas:

67

Su propósito es proporcionar acceso a los diversos matchers implementados en GNU grepde una forma u otra, en particular los matchers AWK que no están disponibles de otra manera, probablemente para propósitos de prueba (vea el error 16481 que trata sobre agregar los matchers gawky posixawk).

Sin embargo, actualmente tiene errores, razón por la cual está documentado como indocumentado :

El jueves 27 de enero de 2005 a las 04:06:04 PM -0500, Charles Levert escribió:
> La opción '-X', y en particular su uso con el "awk" matcher
> ("-X awk") no está documentado.

por favor déjelo sin documentar.

No proporciona ninguna funcionalidad nueva además de -X awk.

Y la implementación de awk regexps no es perfecta, creo.

La nueva expresión regular de GNU contiene algunos medios para establecer la sintaxis de estilo AWK, sí. Sin embargo, gawk no lo usa directamente: primero analiza la expresión regular.

En particular, las expresiones regulares awk permiten secuencias de escape \ NNN, donde NNN es un valor octal. Entonces / \ 040 / mathes space. grep -X awk no parece soportar esto.

Me temo que regex.c no admite estas secuencias de escape.

Tendríamos que asegurarnos de que las expresiones regulares sean totalmente compatibles con las expresiones regulares awk antes de decidir documentar (y, por lo tanto, admitir) esta función.

Creo que no vale la pena.

Stepan

Un seguimiento solicitó que se agregara el comentario y proporcionó un poco más de información sobre la -Xopción:

Mi propia inclinación es sugerir simplemente eliminar -X por completo. Sospecho que fue agregado por el autor original principalmente con fines de prueba. Si se va a quedar, al menos agregue un comentario como este.

/* -X is undocumented on purpose. */

para evitar futuras discusiones sobre un problema resuelto.

Arnold

lo que Stepan hizo poco después .

Stephen Kitt
fuente
3
Buen trabajo arqueológico, gracias Stephen.
xhienne
2
Gracias :-). El camino se detiene en grep 2.0 desafortunadamente; Tengo la impresión de que esa es la versión que se introdujo -X, probablemente como un efecto secundario de la reescritura de DFA, pero el registro de cambios es corto en detalles.
Stephen Kitt
77
"para evitar futuras discusiones sobre un problema resuelto". ¿Cómo funcionó eso? ;)
Brock Adams
1
¿No sería "-X indocumentado porque tiene errores" una mejor opción?
JAB