it-swarm.com.de

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

Beim Lesen von diese Frage habe ich festgestellt, dass GNU grep eine Option -X Hat, die ein Argument erwartet. Seltsamerweise ist dies der Fall 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 Ausgabe von --help :

/* -X is deliberately undocumented.  */

Wenn man weiter schaut, scheint es, dass die Option -X matcherlegt die für den regulären Ausdruck verwendete Engine fest , matcher ist eine vongrep, egrep, fgrep, awk, gawk, posixawk und Perl (ab Version 2.25).

Einige dieser Werte sind streng identisch mit vorhandenen Optionen (nämlich grep -G, grep -E, grep -F Und grep -P). Andererseits haben die drei awk -Varianten keine entsprechenden Optionen.

Weiß jemand, was der eigentliche Zweck dieser Option ist, insbesondere bei einer der Regexp-Engines awk? Kann mir jemand sagen, warum es absichtlich nicht dokumentiert ist?

59
xhienne

Ziel ist es, den Zugriff auf die verschiedenen in GNU grep in der einen oder anderen Form implementierten Matcher zu ermöglichen, insbesondere auf AWK-Matcher, die ansonsten wahrscheinlich nicht zu Testzwecken verfügbar sind ( siehe Fehler 16481 , in dem das Hinzufügen der Matcher gawk und posixawk erläutert wird).

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

Am Donnerstag, den 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 lassen Sie es ohne Papiere.

Außer -X awk bietet es keine neuen Funktionen.

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

Der neue GNU Regex enthält einige Mittel zum Festlegen der AWK-Syntax, ja. Gawk verwendet ihn jedoch nicht direkt: Er analysiert zuerst den Regex.

Insbesondere erlauben awk-Regexps Escape-Sequenzen\NNN, wobei NNN ein Oktalwert ist. Also/\ 040/Mathe-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 awk-regulären Ausdrücken kompatibel sind, bevor wir uns entschieden haben, diese Funktion zu dokumentieren (und somit zu unterstützen).

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

Stepan

A Follow-up bat um das Hinzufügen des Kommentars und lieferte etwas mehr Hintergrundinformationen zu -X Möglichkeit:

Meine eigene Neigung ist es, nur -X vollständig zu entfernen. Ich vermute, es wurde vom ursprünglichen Autor hauptsächlich zu Testzwecken hinzugefügt. 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

welche Stepan tat kurz danach .

68
Stephen Kitt