Jaki jest rzeczywisty cel opcji -X GNU grep i dlaczego jest nieudokumentowany?


58

Czytając to pytanie , odkryłem, że GNU grepma -Xopcję, która oczekuje argumentu. O dziwo nie wspomniano o tym ani na stronie podręcznika ani na stronie informacyjnej.

Patrząc na kod źródłowy, ten komentarz znajduje się na środku --helpwyniku :

/* -X is deliberately undocumented.  */

Patrząc dalej, wydaje się, że -X matcheropcja ustawia silnik używany do regexp , matcherbędąc jedną z grep , egrep, fgrep, awk, gawk, posixawkoraz perl(od wersji 2.25).

Niektóre z tych wartości są całkowicie identyczne z istniejącymi opcjami (mianowicie grep -G, grep -E, grep -Fi grep -P). Z drugiej strony trzy awkwarianty nie mają odpowiednich opcji.

Czy ktoś wie, jaki jest rzeczywisty cel tej opcji, zwłaszcza w przypadku jednego z awksilników regexp? Czy ktoś może mi powiedzieć, dlaczego celowo nie jest to udokumentowane?


6
Ciekawe odkrycie! Podejrzewam, że celem pozostawienia tego dokumentu nieudokumentowanym jest umożliwienie mu usunięcia go z przyszłych wersji w dowolnym momencie i bez uprzedzenia. Innym przykładem nieudokumentowanej opcji GNU jest -EGNU sed, który zapewnia zgodność z BSD sed. (Spodziewam -Esię, że zostanie to udokumentowane, jeśli POSIX formalnie je przyjmie i usunie, jeśli nie zrobi tego.)
John1024,

3
Zgadzam się z @ John1024, chociaż jedyną osobą, która może definitywnie odpowiedzieć, jest Stepan Kasal, który w dniu 7 lutego 2005 r. Udokumentował -Xto celowo nieudokumentowane. (Jego adres e-mail znajduje się w dzienniku zmian, jeśli chcesz go zapytać.)
Wildcard,

3
Próbowałem to prześledzić w historii git, ale okazało się, że został dodany przed pierwszym zatwierdzeniem git grep (był obecny w 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 z wtorku 3 listopada 21:38:52 1998). Przypuszczalnie zaimportowali poprzednie VCS do git, co oczywiście poprzedza git.
derobert

1
Również w grep 2.0, który jest najstarszy z ftp.gnu.org/gnu/grep/?C=M;O=A
derobert

3
... ale nie w wersji 1.6, którą znalazłem na oldlinux.org/Linux.old/distribution/TAMU/TAMU-1.0D/src/tar/... (uwaga: nie starałem się zweryfikować autentyczności tego kodu), więc wydaje się, że do tej pory gdzieś pomiędzy 1.6 (1992) a 2.0 (1993)
derobert

Odpowiedzi:


67

Jego celem jest zapewnienie dostępu do różnych programów dopasowujących zaimplementowanych w GNU grepw takiej lub innej formie, w szczególności programów dopasowujących AWK, które nie są dostępne w inny sposób, prawdopodobnie do celów testowych (patrz błąd 16481, który omawia dodawanie gawki posixawkdopasowywania).

Jednak obecnie jest on wadliwy, dlatego jest udokumentowany jako nieudokumentowany :

W czwartek, 27 stycznia 2005 o 04:06:04 PM -0500, Charles Levert napisał:
> Opcja „-X”, aw szczególności jej użycie z dopasowaniem „awk”
> („-X awk”) jest nieudokumentowana.

proszę zostawić to nieudokumentowane.

Nie zapewnia żadnych nowych funkcji poza -X awk.

I myślę, że implementacja wyrażeń regularnych awk nie jest idealna.

Nowy regex GNU łączy pewne sposoby ustawiania składni stylu AWK, tak. Jednak gawk nie używa go bezpośrednio: najpierw analizuje wyrażenie regularne.

W szczególności wyrażenia regularne awk pozwalają na sekwencje specjalne \ NNN, gdzie NNN jest wartością ósemkową. Więc / \ 040 / mathes space. grep -X awk nie obsługuje tego.

Obawiam się, że regex.c nie obsługuje tych sekwencji ucieczki.

Musimy upewnić się, że wyrażenia regularne są w pełni kompatybilne z wyrażeniami awk, zanim zdecydujemy się udokumentować (a tym samym wesprzeć) tę funkcję.

Myślę, że to nie jest warte kłopotów.

Stepan

Follow-up poproszony o komentarz do dodania i pod warunkiem, nieco więcej tła na -Xopcji:

Moją skłonnością jest zasugerowanie całkowitego usunięcia -X. Podejrzewam, że został dodany przez oryginalnego autora głównie w celach testowych. Jeśli ma pozostać, dodaj przynajmniej taki komentarz.

/* -X is undocumented on purpose. */

aby uniknąć przyszłej dyskusji na temat rozwiązanego problemu.

Arnold

co Stepan zrobił wkrótce potem .


3
Dobra robota archeologiczna, dziękuję Stephen.
xhienne

2
Dzięki :-). Niestety szlak zatrzymuje się na grep 2.0; Mam wrażenie, że jest to wersja, która wprowadziła -X, prawdopodobnie jako efekt uboczny przepisywania DFA, ale dziennik zmian nie zawiera szczegółów.
Stephen Kitt

7
„aby uniknąć przyszłej dyskusji na temat rozwiązanego problemu”. Jak ci poszło? ;)
Brock Adams,

1
Czy „-X nie jest dokumentowany, ponieważ jest wadliwy” byłby lepszym wyborem?
JAB
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.