Was ist der eigentliche Zweck der Option -X von GNU grep und warum ist sie nicht dokumentiert?

58

Beim Lesen dieser Frage habe ich festgestellt, dass GNU grepeine -XOption hat, die ein Argument erwartet. Seltsamerweise wird es weder in der Manpage noch in der Infoseite erwähnt.

Wenn man sich den Quellcode ansieht, gibt es diesen Kommentar genau in der Mitte der --helpAusgabe :

/* -X is deliberately undocumented.  */

Suchen Sie weiter, scheint es , dass die -X matcherOption , den Motor für den regulären Ausdruck verwendet setzt , matcherist eine der grep , egrep, fgrep, awk, gawk, posixawkund perl(ab Version 2.25).

Einige dieser Werte sind streng identisch mit bestehenden Optionen (nämlich grep -G, grep -E, grep -Fund grep -P). Andererseits haben die drei awkVarianten keine entsprechenden Optionen.

Weiß jemand, was der eigentliche Zweck dieser Option ist, insbesondere bei einer der awkregulären Ausdrücke? Kann mir jemand sagen, warum es absichtlich nicht dokumentiert ist?

xhienne
quelle
6
Interessante Entdeckung! Ich vermute, dass der Zweck, es undokumentiert zu lassen, darin besteht, dass sie es nach Belieben und ohne Vorankündigung aus zukünftigen Versionen entfernen können. Ein weiteres Beispiel für eine undokumentierte GNU-Option ist -EGNU sed, die Kompatibilität mit BSD sed bietet. (Ich erwarte -E, dokumentiert zu werden, wenn POSIX es offiziell annimmt und entfernt, wenn es dies nicht tut.)
John1024
3
Ich stimme @ John1024 zu, obwohl die einzige Person, die definitiv antworten kann, Stepan Kasal ist, der am 7. Februar 2005 dokumentiert hat, dass dies -Xbewusst undokumentiert ist. (Seine E-Mail-Adresse steht im Changelog, wenn Sie ihn fragen möchten.)
Wildcard
3
Ich habe versucht, dies in der Git-Historie aufzuspüren, aber es stellte sich heraus, dass es vor Greps erstem Git-Commit hinzugefügt wurde (es war in 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 vom 3. November 1998, 21:38:52 vorhanden). Vermutlich haben sie das vorherige VCS in git importiert, da es offensichtlich älter ist als git.
Derobert
1
Auch in grep 2.0, dem ältesten unter ftp.gnu.org/gnu/grep/?C=M;O=A
derobert
3
... aber nicht in 1.6, das ich unter oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/src/tar/… gefunden habe (Hinweis: Ich habe mich nicht bemüht, die Echtheit dieses Codes zu überprüfen) es scheint bis dato irgendwo zwischen 1.6 (1992) und 2.0 (1993) zu liegen
derobert

Antworten:

67

Sein Zweck ist es, den Zugriff auf die verschiedenen in GNU implementierten Matcher grepin der einen oder anderen Form zu ermöglichen, insbesondere auf AWK-Matcher, die sonst wahrscheinlich zu Testzwecken nicht verfügbar sind (siehe Fehler 16481, in dem das Hinzufügen der Matcher gawkund erörtert wird posixawk).

Es ist jedoch derzeit fehlerhaft, was der Grund ist, warum es als undokumentiert dokumentiert ist :

Am Do, 27. Januar 2005, um 16:06:04 Uhr -0500 schrieb Charles Levert:
> Die Option '-X' und insbesondere ihre Verwendung mit dem Matcher "awk"
> ("-X awk") ist nicht dokumentiert.

bitte lass es undokumentiert.

Es bietet keine neuen Funktionen außer -X awk.

Und die Implementierung von awk regexps ist meiner Meinung nach nicht perfekt.

Der neue GNU-Regex bietet einige Möglichkeiten, die AWK-Syntax festzulegen, ja. Gawk verwendet es jedoch nicht direkt: Es analysiert zuerst den regulären Ausdruck.

Insbesondere erlauben awk-Regexps Escape-Sequenzen \ NNN, wobei NNN ein Oktalwert ist. Also / \ 040 / mathematischer Raum. grep -X awk scheint dies nicht zu unterstützen.

Ich befürchte, dass regex.c diese Escape-Sequenzen nicht unterstützt.

Wir müssten sicherstellen, dass die regulären Ausdrücke vollständig mit regulären Ausdrücken von awk kompatibel sind, bevor wir uns entschließen, diese Funktion zu dokumentieren (und damit zu unterstützen).

Ich denke, es ist die Mühe nicht wert.

Stepan

In einem Follow-up wurde um das Hinzufügen des Kommentars gebeten, und die -XOption wurde etwas näher erläutert:

Meine eigene Neigung ist es, nur -X vollständig zu entfernen. Ich vermute, dass es vom ursprünglichen Autor hauptsächlich zu Testzwecken hinzugefügt wurde. Wenn es drin bleiben soll, füge wenigstens einen Kommentar wie diesen hinzu.

/* -X is undocumented on purpose. */

um zukünftige Diskussionen über ein gelöstes Problem zu vermeiden.

Arnold

was Stepan kurz danach tat .

Stephen Kitt
quelle
3
Gute archäologische Arbeit, danke Stephen.
Xhienne
2
Vielen Dank :-). Der Trail stoppt leider bei grep 2.0; Ich habe den Eindruck, dass dies die Version ist, die -Xwahrscheinlich als Nebeneffekt des DFA-Rewrites eingeführt wurde, aber das Changelog enthält nur wenige Details.
Stephen Kitt
7
"Um zukünftige Diskussionen über ein gelöstes Problem zu vermeiden." Wie ist das gelaufen? ;)
Brock Adams
1
Wäre "-X ist undokumentiert, weil es fehlerhaft ist" nicht die bessere Wahl gewesen?
JAB,