Qual è lo scopo effettivo dell'opzione -X di GNU grep e perché non è documentato?


58

Leggendo questa domanda , ho scoperto che GNU grepha -Xun'opzione che prevede una discussione. Stranamente, non è menzionato né nella pagina man né nella pagina info.

Guardando il codice sorgente, c'è quel commento proprio nel mezzo --helpdell'output :

/* -X is deliberately undocumented.  */

Guardando oltre, sembra che l' -X matcheropzione imposta il motore utilizzato per l'espressione regolare , matcheressendo uno dei grep , egrep, fgrep, awk, gawk, posixawke perl(a partire dalla versione 2.25).

Alcuni di questi valori sono rigorosamente identiche alle opzioni esistenti (cioè grep -G, grep -E, grep -Fe grep -P). D'altra parte, le tre awkvarianti non hanno opzioni corrispondenti.

Qualcuno sa qual è lo scopo effettivo di questa opzione, in particolare con uno dei awkmotori regexp? Qualcuno può dirmi perché non è intenzionalmente documentato?


6
Scoperta interessante! Sospetto che lo scopo di lasciarlo senza documenti sia in modo che possano sentirsi liberi di rimuoverlo dalle versioni future a piacimento e senza preavviso. Un altro esempio di opzione GNU non documentata è -Eper GNU sed che fornisce compatibilità con BSD sed. (Mi aspetto -Edi essere documentato se POSIX lo adotta formalmente e rimosso in caso contrario.)
John1024

3
Sono d'accordo con @ John1024, anche se l'unica persona che può definitivamente rispondere è Stepan Kasal, che, il 7 febbraio 2005, ha documentato che -Xè deliberatamente non documentato. (Il tuo indirizzo e-mail è nel registro delle modifiche se vuoi chiederglielo.)
Wildcard

3
Ho provato a rintracciarlo attraverso la storia di Git, ma risulta che è stato aggiunto prima del primo commit git di grep (era presente in 06b9f7e683e7650804cadd9a4c5cf6bff6c89625 da mar 3 nov 21:38:52 1998). Presumibilmente hanno importato il precedente VCS in git, come ovviamente precede git.
derobert,

1
Anche in grep 2.0, che è la più antica si trovano a ftp.gnu.org/gnu/grep/?C=M;O=A
derobert

3
... ma non nella 1.6 che ho trovato su oldlinux.org/Linux.old/distributions/TAMU/TAMU-1.0D/src/tar/… (nota: non ho fatto alcuno sforzo per verificare l'autenticità di quel codice) quindi sembrerebbe datare da qualche parte tra 1.6 (1992) e 2.0 (1993)
derobert,

Risposte:


67

Il suo scopo è quello di fornire l'accesso ai vari matcher implementati in GNU grepin una forma o nell'altra, in particolare matcher AWK che non sono disponibili altrimenti, probabilmente a scopo di test (vedi bug 16481 che discute l'aggiunta di gawke posixawkmatcher).

Tuttavia è attualmente buggy, motivo per cui è documentato come non documentato :

Giovedì 27 gennaio 2005 alle 04:06:04 PM -0500, Charles Levert ha scritto:
> L'opzione '-X', e in particolare il suo uso con il matcher "awk"
> ("-X awk") non è documentato.

per favore lascialo senza documenti.

Non fornisce alcuna nuova funzionalità oltre a -X awk.

E l'implementazione di awk regexps non è perfetta, credo.

La nuova regex GNU concilia alcuni mezzi per impostare la sintassi in stile AWK, sì. Eppure gawk non lo usa direttamente: analizza prima la regex.

In particolare, regexps awk consente sequenze di escape \ NNN, dove NNN è un valore ottale. Quindi / \ 040 / matematica spazio. grep -X awk non sembra supportarlo.

Temo che regex.c non supporti queste sequenze di escape.

Dovremmo assicurarci che le regex siano pienamente compatibili con le regex awk prima di decidere di documentare (e quindi supportare) questa funzione.

Penso che non valga la pena.

Stepan

Un follow-up ha chiesto l'aggiunta del commento e ha fornito un po 'più di dettagli -Xsull'opzione:

La mia inclinazione è quella di suggerire di rimuovere completamente -X. Sospetto che sia stato aggiunto dall'autore originale principalmente a scopo di test. Se rimarrà dentro, almeno aggiungere un commento come questo.

/* -X is undocumented on purpose. */

per evitare future discussioni su un problema risolto.

Arnold

cosa che Stepan fece poco dopo .


3
Bel lavoro archeologico, grazie Stefano.
Xhienne,

2
Grazie :-). Sfortunatamente il sentiero si ferma a grep 2.0; Ho l'impressione che sia la versione introdotta -X, probabilmente come effetto collaterale della riscrittura di DFA, ma il log delle modifiche è a corto di dettagli.
Stephen Kitt,

7
"per evitare future discussioni su un problema risolto". Come ha funzionato? ;)
Brock Adams,

1
"-X non è documentato perché è difettoso" sarebbe stata una scelta migliore?
JAB,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.