Quel est le but réel de l'option -X de GNU grep et pourquoi est-elle non documentée?

58

En lisant cette question , j'ai découvert que GNU grepa une -Xoption qui attend un argument. Étrangement, il n'est mentionné ni dans la page de manuel ni dans la page d'informations.

En regardant le code source, il y a ce commentaire juste au milieu de la --helpsortie :

/* -X is deliberately undocumented.  */

Au -delà, il semble que l' -X matcheroption de règle le moteur utilisé pour l'expression régulière , matcherétant l' un des grep , egrep, fgrep, awk, gawk, posixawket perl(de la version 2.25).

Certaines de ces valeurs sont strictement identiques aux options existantes ( à savoir grep -G, grep -E, grep -Fet grep -P). D'autre part, les trois awkvariantes n'ont pas d'options correspondantes.

Est-ce que quelqu'un sait quel est le but réel de cette option, en particulier avec l'un des awkmoteurs de regexp? Est-ce que quelqu'un peut me dire pourquoi c'est délibérément non documenté?

xhienne
la source
6
Découverte intéressante! Je soupçonne que le but de le laisser sans papiers est qu'ils puissent se sentir libre de le retirer des versions futures à volonté et sans préavis. Un autre exemple d’option non documentée GNU -Econcerne GNU sed, qui offre une compatibilité avec BSD sed. (J'espère -Eêtre documenté si POSIX l'adopte formellement et le supprime s'il ne le fait pas.)
John1024
3
Je suis d’accord avec @ John1024, bien que la seule personne qui puisse répondre de manière définitive est Stepan Kasal, qui, le 7 février 2005, a documenté qu’il -Xétait délibérément non documenté. (Son adresse e-mail est dans le journal des modifications si vous voulez le lui demander.)
Wildcard
3
J'ai essayé de retrouver cela dans l'histoire de git, mais il s'est avéré qu'il a été ajouté avant le premier commit de git (il était présent dans 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 du Mar 3 Nov 21:38:52 1998). Vraisemblablement, ils ont importé le VCS précédent dans git, comme cela était évidemment antérieur à git.
derobert
1
Aussi dans grep 2.0 qui est le plus ancien trouvé sur ftp.gnu.org/gnu/grep/?C=M;O=A
derobert le
3
... mais pas dans la 1.6 que j'ai trouvée à oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/src/tar/… (note: je n'ai fait aucun effort pour vérifier l'authenticité de ce code) alors il semblerait que sa date se situe quelque part entre 1,6 (1992) et 2,0 (1993)
derobert

Réponses:

67

Son but est de fournir un accès aux différents matchers mis en œuvre dans GNU grepsous une forme ou une autre, en particulier matchers awk qui ne sont pas disponibles autrement, probablement à des fins d' essai (voir bogue 16481 qui porte sur l' ajout de la gawket posixawkmatchers).

Cependant, il est actuellement bogué, ce qui explique pourquoi il est documenté comme étant non documenté :

Le jeudi 27 janvier 2005 à 16:06:04 -0500, Charles Levert a écrit:
> L'option '-X', et en particulier son utilisation avec le matcher "awk"
> ("-X awk") n'est pas documentée.

s'il vous plaît laissez-le sans papiers.

Il ne fournit aucune nouvelle fonctionnalité en plus de -X awk.

Et je pense que la mise en œuvre des expressions rationnelles awk n’est pas parfaite.

La nouvelle expression rationnelle GNU indique certains moyens de définir la syntaxe de style AWK, oui. Pourtant, gawk ne l'utilise pas directement: il analyse d'abord la regex.

En particulier, les expressions rationnelles awk permettent les séquences d'échappement \ NNN, où NNN est une valeur octale. Donc / \ 040 / réduit l'espace. grep -X awk ne semble pas supporter cela.

Je crains que regex.c ne supporte pas ces séquences d'échappement.

Avant de décider de documenter (et donc de prendre en charge) cette fonctionnalité, nous devrons nous assurer que les expressions rationnelles sont entièrement compatibles avec celles de awk.

Je pense que ça ne vaut pas la peine.

Stepan

Un suivi a demandé que le commentaire soit ajouté et a fourni un peu plus de fond sur l' -Xoption:

Mon propre penchant est de suggérer simplement de supprimer -X entièrement. Je soupçonne que l'auteur original l'a ajouté principalement à des fins de test. Si cela doit rester, ajoutez au moins un commentaire comme celui-ci.

/* -X is undocumented on purpose. */

pour éviter toute discussion future sur un problème résolu.

Arnold

ce que Stepan a fait peu de temps après .

Stephen Kitt
la source
3
Beau travail archéologique, merci Stephen.
xhienne
2
Merci :-). La piste s'arrête à grep 2.0 malheureusement; J'ai l'impression que c'est la version qui a été introduite -X, probablement comme un effet secondaire de la réécriture DFA, mais le journal des modifications manque de détails.
Stephen Kitt
7
"pour éviter de futures discussions sur un problème résolu." Comment ça s'est passé? ;)
Brock Adams
1
"-X n'est pas documenté parce que c'est un buggy" n'aurait-il pas été un meilleur choix?
JAB